在C#代码调用C++DLL库,结构体进行转换时报错:传递给系统调用的数据区域太小.(异常来自 HRESULT:0x8007007A)。原因是结构体使用了字符串数组时,如果填写的字符串包含中文就会出现这种错误。
c++结构体如下:
typedef struct STUDENT
{
int iStudentID;
char szName[100];
int iAge;
int iWeight;
char szSex[100];
}STUDENTINFO;
c#结构体转换如下:
public struct STUDENT
{
public int iStudentID;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 100)]
public char[] szName;
public int iAge;
public int iWeight;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 100)]
public char[] szSex;
};
szName数组填写中文,进行传送时就报错了。
问题解决如下:
将C++结构体修改如下:
typedef struct STUDENT
{
int iStudentID;
char* szName;