C#调用C++的DLL,返回一个结构体,C++的结构体如下:
typedef struct
{
int wg_reason[10];
String wg_Watt[10];
String wg_time[10];
} Inf_RWGJL ;
然后我在用C#定义的结构体如下:
[StructLayout(LayoutKind.Sequential)]
public struct WGJL
{
[MarshalAs( UnmanagedType.ByValArray, SizeConst = 10)]
public int[] wgyy;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]
public string[] wggl;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]
public string[] wgsj;
}
不知道哪个定义的不正确,返回报错:方法的类型签名与 PInvoke 不兼容。
这个里面有 “String” 这种对象级的数据结构, 它不能简单的映射成C#的string。 不知道String的结构定义方式这里没法给出正确的形式的。
是啊,经过调查,对方使用的是C++ builder 里的AnsiString ,所以我定义了int[]整形数组来接收地址,然后再从这个地址取出相应的字符串。