利用C#Marshal类实现托管和非托管的相互转换 .
来源:互联网 发布:mac控制中心airplay 编辑:程序博客网 时间:2024/05/12 08:10
Marshal 类
命名空间:System.Runtime.InteropServices
提供了一个方法集,这些方法用于分配非托管内存、复制非托管内存块、将托管类型转换为非托管类型,此外还提供了在与非托管代码交互时使用的其他杂项方法。Marshal 类中定义的 static 方法对于处理非托管代码至关重要。此类中定义的大多数方法通常由需要在托管和非托管编程模型之间提供桥梁的开发人员使用。例如,StringToHGlobalAnsi 方法将 ANSI 字符从指定的字符串(在托管堆中)复制到非托管堆中的缓冲区。该方法还分配大小正确的目标堆。
struct和IntPtr的相互转换:
tagCaptureFrame f = (tagCaptureFrame)Marshal.PtrToStructure (m.WParam, typeof(tagCaptureFrame));
struct和byte[]相互转换(用Marshal类实现)
转载自:http://www.cnblogs.com/tuyile006/archive/2006/12/28/605962.html
相当于序列化与反序列化,但是不用借助外部文件
1、struct转换为byte[]
static byte[] StructToBytes(object structObj)
{
int size = Marshal.SizeOf(structObj);
IntPtr buffer = Marshal.AllocHGlobal(size);
try
{
Marshal.StructureToPtr(structObj, buffer, false);
byte[] bytes = new byte[size];
Marshal.Copy(buffer, bytes, 0, size);
return bytes;
}
finally
{
Marshal.FreeHGlobal(buffer);
}
}
2、byte[]转换为struct
static object BytesToStruct(byte[] bytes, Type strcutType)
{
int size = Marshal.SizeOf(strcutType);
IntPtr buffer = Marshal.AllocHGlobal(size);
try
{
Marshal.Copy(bytes, 0, buffer, size);
return Marshal.PtrToStructure(buffer, strcutType);
}
finally
{
Marshal.FreeHGlobal(buffer);
}
}
- 利用C#Marshal类实现托管和非托管的相互转换 .
- 利用C#Marshal类实现托管和非托管的相互转换 .
- 利用C# Marshal类实现托管和非托管的相互转换
- C++/CLI 托管C++的托管与非托管字符串的相互转换【1】
- 托管代码和非托管代码的相互调用
- 托管和非托管
- 托管和非托管
- 托管和非托管
- 托管和非托管
- 托管和非托管的问题
- 托管和非托管的区别
- 托管和非托管的区别
- c++.net 托管字符串 非托管指针 互相转换
- C++(/clr)托管类型与非托管类型互相转换
- Marshal类支持从托管内存空间复制数据到非托管内存空间
- 非托管类,值类,引用类的相互调用
- 托管和非托管资源
- 托管和非托管代码
- QT常见错误二
- MFC编辑框换行实现
- php数据库操作类
- 真正优秀的程序员有哪些与众不同之处?
- 关于proguard使用总结
- 利用C#Marshal类实现托管和非托管的相互转换 .
- 电子词典(第十五周上机任务)
- java破解ip屏蔽+多线程同步
- c#图像处理入门(-bitmap类和图像像素值获取方法) .
- java中的集合类
- l数据库基础前四章总结(增删改查基础命令语句的的使用)
- 【求助(高手看下)】一道作业题能编译,但是运行的时候答案是错的,求指正。
- Ubuntu 使用体会: (安装软件包)
- C#属性和成员变量的区别?