c# 结构体struct包含数与byte类型的转换(二)

继续。。。。

网上有很多的定义结构体的方法:

第一种:

 public struct strutest
  {
    public int csp;	  
    public unsafe fixed int plan[4];   
  }   

这种方法直接把数组定义成了fixed的形式,这样做的结构就是该数组成为了一个指针的形式,这样做可以方便的像里面传递值,但是问题出在了调用之前写的xamConverter类的时候有一个

Marshal.StructureToPtr(strutest, ptr, true);
这样的话数值  csp 是转过去了,但是plan[4]的地址发生了变化,它的值全部没了。。。。郁闷

第二种:

[StructLayout(LayoutKind.Sequential, Pack = 1)]
    public  struct struTest
    {  public int[] data;
           public int[] fft;
    };


这种方法其实是在


调试的时候可以用的,但是会报错 AccessViolationException 尝试catch它不让报错中断运行

但是。。。。微软说,不行啊不行 详见:http://connect.microsoft.com/VisualStudio/feedback/details/557105/unable-to-catch-accessviolationexception

我连     调试--》异常》报警错误都改了还是不行

第三种:

 public  struct struTest
    {
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 1024)]
        public int[] data;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst =1024)]
        public int[] fft;
    };

 

这个是我使用的定义结构体的方法

 

在xamConverter类中的第一种方法即调用fixed的方法中是不能用的,因为:不能调用指向托管类型的指针;

第二种方法可以用了  UnmanagedType.ByValArray, SizeConst = 1024分别定义了类型和长度

 

 资源下载链接;http://download.csdn.net/detail/zlei2013141/4278982

 对于要和c++结构体进行交互的 提供一种最简单的方法


[StructLayout(LayoutKind.Sequential, Pack = 1)]
    public  struct struTest
    {  public int[] data;
           public int[] fft;
    };
去掉红色部分 ,就能使对齐方式和c++默认的相同

如果c++ 使用#program pack=n 改变了对齐方式,把红色部分改成Pack=n就行了。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值