关于c中的结构体在.net中如何定义?

banping 2007-08-03 09:08:52
typedef struct
{
char name[40]; //姓名
char sex[10]; //性别
char people[20]; //民族,
}IDCARD_ALL;
这个是c中的结构体,我在c#中应该如何定义呢?
这个结构体我需要使用ref传递到外部dll中去付值的.
我在c#中定义
public struct SEntity
{

public string name;
public string sex;
public string people;
}
传递进入dll后报错.访问不可读写内存.vb6.0的例子中使用的是string*40这样来定义的.

后来我定义成
public struct SEntity
{

public char[] name;
public char[] sex;
public char[] people;
}
又报传入数组不是所需要的类型.
...全文
214 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
banping 2007-08-03
  • 打赏
  • 举报
回复
搞定,需要使用byte[] 来定义
banping 2007-08-03
  • 打赏
  • 举报
回复
to :想飞

试过了,报错 尝试读取或写入受保护的内存
jerryfos 2007-08-03
  • 打赏
  • 举报
回复
不好意思,我的第2点提法错了,应该是把结构生成一个静态的对象:
public struct SEntity
{

public string name;
public string sex;
public string people;
}

public static SEntity mySEntity;

这样在ref时就能保证结构中的变量已经分配了内存
xbt746 2007-08-03
  • 打赏
  • 举报
回复
c#里没有 typedef
jerryfos 2007-08-03
  • 打赏
  • 举报
回复
1.要使用“ref”必须保证结构中的变量在使用前已经分配了内存空间,楼主你确认一下使用前结构中的变量是否已经完成了赋值。
2.public struct SEntity 换成 public static struct SEntity 试试,有可能是你在ref引用时该结构已经被回收了,换成静态结构试试
neucf 2007-08-03
  • 打赏
  • 举报
回复
用[MarshalAs(UnmanagedType.ByValArray, SizeConst=40)],这样new的时候,就会为你的数组申请那么多的内存了。
vainnetwork 2007-08-03
  • 打赏
  • 举报
回复
关注,帮顶了
neucf 2007-08-03
  • 打赏
  • 举报
回复
public struct SEntity
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst=40)]
public byte[] name;
[MarshalAs(UnmanagedType.ByValArray, SizeConst=10)]
public byte[] sex;
[MarshalAs(UnmanagedType.ByValArray, SizeConst=20)]
public byte[] people;
}
banping 2007-08-03
  • 打赏
  • 举报
回复
江湖规矩自己来顶

110,538

社区成员

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

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

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