C#调用包含结构体变量函数的vc++的dll出现问题

山娃马小三儿 2010-01-17 02:00:25
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.
...全文
194 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
风龙-3 2010-01-18
  • 打赏
  • 举报
回复
增加属性[StructLayout(LayoutKind.Sequential)];

public byte[] Name
可改为
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string Name
试试看
山娃马小三儿 2010-01-18
  • 打赏
  • 举报
回复
帮忙,帮忙,帮忙
山娃马小三儿 2010-01-17
  • 打赏
  • 举报
回复
大家帮帮忙 啊
山娃马小三儿 2010-01-17
  • 打赏
  • 举报
回复
最怵头的就是指针,能不能详细点啊
csrwgs 2010-01-17
  • 打赏
  • 举报
回复
i = Syn_ReadMsg(iPortID, iIfOpen, out tCardData);

把out改成ref试试

再不行就转成指针
山娃马小三儿 2010-01-17
  • 打赏
  • 举报
回复
求帮助

111,093

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧