Marshal类
提供了一个方法集,这些方法用于分配非托管内存、复制非托管内存块、将托管类型转换为非托管类型,此外还提供了在与非托管代码交互时使用的其他杂项方法。
命名空间:System.Runtime.InteropServices
Marshal 类中定义的 static 方法对于处理非托管代码至关重要。此类中定义的大多数方法通常由需要在托管和非托管编程模型之间提供桥梁的开发人员使用。
例如,StringToHGlobalAnsi 方法将 ANSI 字符从指定的字符串(在托管堆中)复制到非托管堆中的缓冲区。该方法还分配大小正确的目标堆。
公共方法
方法名称 |
说明 |
递增指定接口上的引用计数。 |
|
从 COM 任务内存分配器分配指定大小的内存块。 |
|
使用 LocalAlloc 分配内存块。 |
|
获取由指定的名字对象标识的接口指针。 |
|
在 COM 可调用包装 (CCW) 句柄包含的对象上更改它的强度。 |
|
将数据从托管数组复制到非托管内存指针,或从非托管内存指针复制到托管数组。 |
|
聚合托管对象和指定的 COM 对象。 |
|
在指定类型的对象中包装指定的 COM 对象。 |
|
释放指定的非托管内存块所指向的所有子结构。 |
|
通过将提供的运行库可调用包装 (RCW) 的引用计数设置为 0,释放对 RCW 的所有引用。 |
|
使用 SysFreeString 释放 BSTR。 |
|
释放由非托管 COM 任务内存分配器使用 Marshal.AllocCoTaskMem 分配的内存块。 |
|
释放以前使用 AllocHGlobal 从进程的非托管内存中分配的内存。 |
|
返回指定类型的全局唯一标识符 (GUID),或使用类型库导出程序 (TlbExp.exe) 所用的算法生成 GUID。 |
|
返回指定类型的编程标识符 (ProgID)。 |
|
从运行对象表 (ROT) 获取指定对象的运行实例。 |
|
返回一个接口指针,该接口指针表示对象的指定接口。 |
|
返回一个接口指针,该指针表示对象的指定接口(如果调用方与对象在同一上下文中)。 |
|
从指定的 COM 对象获取指定键所引用的数据。 |
|
获取指定的 System.Reflection.MemberInfo 在向 COM 公开时的虚函数表 (VTBL) 槽。 |
|
将非托管函数指针转换为委托。 |
|
获取在向 COM 公开时某个类型的虚函数表 (VTBL) 中的最后一个槽。 |
|
检索标识所发生异常的类型的代码。 | <