C#调用包含结构体变量函数的vc++的dll出现问题
dll函数原型:
结构体声明
typedef struct tagIDCardData{
char Name[32]; //姓名
char Sex[4]; //性别
char Nation[6]; //名族
char Born[18]; //出生日期
char Address[72]; //住址
char IDCardNo[38]; //身份证号
char GrantDept[32]; //发证机关
char UserLifeBegin[18]; //有效开始日期
char UserLifeEnd[18]; //有效截止日期
char reserved[38]; //保留
char PhotoFileName[255]; //照片路径
}IDCardData;
函数声明:
Syn_ReadMsg(int iPortID,int iIfOpen,IDCardData *pIDCardData);
说明: 读取证/卡信息
参数:iPort [in] 整数,表示端口号。参见7.1。
iIfOpen [in] 整数,参见7.2。
pIDCardData [out] IDCardData类型读出的数据
在C#中的结构体声明如下
public struct CardData
{
public byte[] Name;
public byte[] Sex;
public byte[] Nation;
public byte[] Born;
public byte[] Address;
public byte[] IDCardNo;
public byte[] GrantDept;
public byte[] UserLifeBegin;
public byte[] UserLifeEnd;
public byte[] reserved;
public byte[] PhotoFileName;
};
调用:
CardData tCardData = new CardData();
tCardData.Name = new byte[32];
tCardData.Sex = new byte[4];
tCardData.Nation = new byte[6];
tCardData.Born = new byte[18];
tCardData.Address = new byte[72];
tCardData.IDCardNo = new byte[38];
tCardData.GrantDept = new byte[32];
tCardData.UserLifeBegin = new byte[18];
tCardData.UserLifeEnd = new byte[18];
tCardData.reserved = new byte[38];
tCardData.PhotoFileName = new byte[255];
int i = -1;
i = Syn_ReadMsg(iPortID, iIfOpen, out tCardData);
报错:Attempted to read or write protected memory. This is often an indication that other memory is corrupt.