日期:2014-05-19  浏览次数:20928 次

关于c中的结构体在.net中如何定义?
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;    
}
又报传入数组不是所需要的类型.  


------解决方案--------------------
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;
}

------解决方案--------------------
关注,帮顶了
------解决方案--------------------
1.要使用“ref”必须保证结构中的变量在使用前已经分配了内存空间,楼主你确认一下使用前结构中的变量是否已经完成了赋值。
2.public struct SEntity 换成 public static struct SEntity 试试,有可能是你在ref引用时该结构已经被回收了,换成静态结构试试

------解决方案--------------------
c#里没有 typedef