c#的Marshal
补充过程中~
感觉应该是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相关推荐
- Microsoft .Net Remoting系列专题之二:Marshal、Disconnect与生命周期以及跟踪服务
Microsoft .Net Remoting系列专题之二 一.远程对象的激活 在Remoting中有三种激活方式,一般的实现是通过RemotingServices类的静态方法来完成.工作过程事实上是 ...
- Marshal.Copy 之 startIndex 参数的含义
Marshal.Copy 可以将 Array 中的数据拷贝给 IntPtr 所指向的地址,也可以将 IntPtr 地址中的内容拷贝给 Array. 不管是从哪里拷贝到哪里,其中都有一个参数 start ...
- Marshal.ReleaseComObject
释放COM对象相关文档: http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal.releasec ...
- 异常:System.Runtime.InteropServices.Marshal.GetTypeFromCLSID(System.Guid)
异常:System.Runtime.InteropServices.Marshal.GetTypeFromCLSID(System.Guid) 原因:该引用所需.NET Framework版本为4.5 ...
- C# Marshal类基本概念和入门示例程序
marshal:直译为"编排", 在计算机中特 指将数据按某种描述格式编排出来,通常来说一般是从非文本格式到文本格式的数据转化. unmarshal是指marshal的逆过程.比如 ...
- C# - Marshal 学习总结
C#--Marshal.StructureToPtr方法简介 http://blog.csdn.net/livelylittlefish/article/details/2423764 ...
- Go的json解析:Marshal与Unmarshal
简介 Json(Javascript Object Nanotation)是一种数据交换格式,常用于前后端数据传输.任意一端将数据转换成json 字符串,另一端再将该字符串解析成相应的数据结构,如st ...
- 计算机中的 marshal 是什么意思?(列集:将数据从某种格式存为流格式的操作)(序列化)(marshalling、unmarshalling散集)
今天看dbus框架,看到一个marshal method call to message不知道是什么意思 IPC进程间通信 D-Bus(Desktop Bus)快速入门(以libdbus-glib库为 ...
- Marshal类的简单使用
2019独角兽企业重金招聘Python工程师标准>>> 终于从北京回上海了,第一次听unity开发者大会,感觉讲的都是一些Unity 5新功能的介绍,其实主要还是要靠自己去摸索那些新 ...
- C#调用C++ memcpy实现各种参数类型的内存拷贝 VS marshal.copy的实现 效率对比
C#调用C++ memcpy实现各种参数类型的内存拷贝 VS marshal.copy的实现 效率对比 using System; using System.Runtime.InteropServic ...
最新文章
- 了解Android中的meta-data及其应用
- golang 创建文件目录 os.Mkdir、os.MkdirAll 区别
- 5、学MySQL前必须要了解的数据库专业术语
- 自百度2012吧——这些都是巧合吗
- 某虚拟化项目总结:一条光纤引发的故障
- Serializing Lua objects into Lua Code
- 【Silverlight】Bing Maps学习系列(三):如何控制地图
- PyTorch官方教程《Deep Learning with PyTorch》开源分享,LeCun力荐,通俗易懂
- html div右下浮动,div 初始化及左右浮动
- dsp2812 寄存器总线
- AIScanner文字识别软件 OCR
- 我的回忆和有趣的故事 by李维(台湾)
- 金蝶K3安装环境检测缺少microsoft vm for java组件解决办法
- html5地图定位高德,JS使用高德地图定位
- html只能用鼠标进行各种操作,鼠标的基本操作有哪些?
- mac os 录屏快捷键_MAC上有哪些优秀的日常软件 入门级Mac OS 用户必备软件
- 江西财经大学计算机考研资料汇总
- 2021年彬州范公中学高考成绩查询,彬州市拟奖励81人名单公布!快看有你认识的吗?...
- 直播间小游戏,带货直播源码如何实现?
- 扫地机器人路径规划算法
热门文章
- 7-25日牛客网刷题 未知点、错题 集合
- settime java import_void setTime(long time)
- 神策数据通过中国信通院 SDK 安全评测
- 大数据驱动线上线下场景融合和零售数字化营销(有福利)
- iOS开发技巧 - Size Class与iOS 8多屏幕适配(一)
- 使用intellij的svn时提示出错: Can't use Subversion command
- SparkStreaming入门及例子
- 安装php时,make步骤报错make: *** [ext/gd/gd.lo] Error 1
- Spring定时器配置
- Android项目导出jar包的小技巧