补充过程中~
感觉应该是C#调用非托管的比较专门的class

例1、
public struct ImageDataMsg 

public char DataType; 
public int Srv_index; 
public char ConvertType; 
//这个个地方要指定长度,这样就可以的德奥结构体的正确长度了 
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)] 
public int[] VecLayer;//需要那几个图层。 
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)] 
public int[] GridLayer;//需要那几个栅格图层 
public int Scale_index;//需要的是那个比例尺的图像 
public int x_pos; 
public int y_pos; 
public int ClientArea_x; 
public int ClientArea_y; 

//使用这个方法将你的结构体转化为bytes数组 
public static byte[] Struct2Bytes(ImageDataMsg obj) 

int size = Marshal.SizeOf(obj); 
byte[] bytes = new byte[size]; 
try 

IntPtr ptr = Marshal.AllocHGlobal(size); 
Marshal.StructureToPtr(obj, ptr, false); 
Marshal.Copy(ptr, bytes, 0, size); 
Marshal.FreeHGlobal(ptr); 
return bytes; 

catch (Exception ee) 

MessageBox.Show(ee.Message); 
return bytes; 

}

//使用这个方法将byte数组转化为结构体 
public static object BytesToStuct2(byte[] bytes, ImageDataMsg type) 

//得到结构体的大小 
int size = Marshal.SizeOf(type); 
//byte数组长度小于结构体的大小 
if (size > bytes.Length) 

//返回空 
return null; 

//分配结构体大小的内存空间 
IntPtr structPtr = Marshal.AllocHGlobal(size); 
//将byte数组拷到分配好的内存空间 
Marshal.Copy(bytes, 0, structPtr, size); 
//将内存空间转换为目标结构体 
object obj = Marshal.PtrToStructure(structPtr, typeof(ImageDataMsg)); 
//释放内存空间 
Marshal.FreeHGlobal(structPtr); 
//返回结构体 
return obj; 
}

转载于:https://blog.51cto.com/huangchaosuper/887538

c#的Marshal相关推荐

  1. Microsoft .Net Remoting系列专题之二:Marshal、Disconnect与生命周期以及跟踪服务

    Microsoft .Net Remoting系列专题之二 一.远程对象的激活 在Remoting中有三种激活方式,一般的实现是通过RemotingServices类的静态方法来完成.工作过程事实上是 ...

  2. Marshal.Copy 之 startIndex 参数的含义

    Marshal.Copy 可以将 Array 中的数据拷贝给 IntPtr 所指向的地址,也可以将 IntPtr 地址中的内容拷贝给 Array. 不管是从哪里拷贝到哪里,其中都有一个参数 start ...

  3. Marshal.ReleaseComObject

    释放COM对象相关文档: http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal.releasec ...

  4. 异常:System.Runtime.InteropServices.Marshal.GetTypeFromCLSID(System.Guid)

    异常:System.Runtime.InteropServices.Marshal.GetTypeFromCLSID(System.Guid) 原因:该引用所需.NET Framework版本为4.5 ...

  5. C# Marshal类基本概念和入门示例程序

    marshal:直译为"编排", 在计算机中特 指将数据按某种描述格式编排出来,通常来说一般是从非文本格式到文本格式的数据转化. unmarshal是指marshal的逆过程.比如 ...

  6. C# - Marshal 学习总结

    C#--Marshal.StructureToPtr方法简介 http://blog.csdn.net/livelylittlefish/article/details/2423764         ...

  7. Go的json解析:Marshal与Unmarshal

    简介 Json(Javascript Object Nanotation)是一种数据交换格式,常用于前后端数据传输.任意一端将数据转换成json 字符串,另一端再将该字符串解析成相应的数据结构,如st ...

  8. 计算机中的 marshal 是什么意思?(列集:将数据从某种格式存为流格式的操作)(序列化)(marshalling、unmarshalling散集)

    今天看dbus框架,看到一个marshal method call to message不知道是什么意思 IPC进程间通信 D-Bus(Desktop Bus)快速入门(以libdbus-glib库为 ...

  9. Marshal类的简单使用

    2019独角兽企业重金招聘Python工程师标准>>> 终于从北京回上海了,第一次听unity开发者大会,感觉讲的都是一些Unity 5新功能的介绍,其实主要还是要靠自己去摸索那些新 ...

  10. C#调用C++ memcpy实现各种参数类型的内存拷贝 VS marshal.copy的实现 效率对比

    C#调用C++ memcpy实现各种参数类型的内存拷贝 VS marshal.copy的实现 效率对比 using System; using System.Runtime.InteropServic ...

最新文章

  1. 了解Android中的meta-data及其应用
  2. golang 创建文件目录 os.Mkdir、os.MkdirAll 区别
  3. 5、学MySQL前必须要了解的数据库专业术语
  4. 自百度2012吧——这些都是巧合吗
  5. 某虚拟化项目总结:一条光纤引发的故障
  6. Serializing Lua objects into Lua Code
  7. 【Silverlight】Bing Maps学习系列(三):如何控制地图
  8. PyTorch官方教程《Deep Learning with PyTorch》开源分享,LeCun力荐,通俗易懂
  9. html div右下浮动,div 初始化及左右浮动
  10. dsp2812 寄存器总线
  11. AIScanner文字识别软件 OCR
  12. 我的回忆和有趣的故事 by李维(台湾)
  13. 金蝶K3安装环境检测缺少microsoft vm for java组件解决办法
  14. html5地图定位高德,JS使用高德地图定位
  15. html只能用鼠标进行各种操作,鼠标的基本操作有哪些?
  16. mac os 录屏快捷键_MAC上有哪些优秀的日常软件 入门级Mac OS 用户必备软件
  17. 江西财经大学计算机考研资料汇总
  18. 2021年彬州范公中学高考成绩查询,彬州市拟奖励81人名单公布!快看有你认识的吗?...
  19. 直播间小游戏,带货直播源码如何实现?
  20. 扫地机器人路径规划算法

热门文章

  1. 7-25日牛客网刷题 未知点、错题 集合
  2. settime java import_void setTime(long time)
  3. 神策数据通过中国信通院 SDK 安全评测
  4. 大数据驱动线上线下场景融合和零售数字化营销(有福利)
  5. iOS开发技巧 - Size Class与iOS 8多屏幕适配(一)
  6. 使用intellij的svn时提示出错: Can't use Subversion command
  7. SparkStreaming入门及例子
  8. 安装php时,make步骤报错make: *** [ext/gd/gd.lo] Error 1
  9. Spring定时器配置
  10. Android项目导出jar包的小技巧