提供了一个方法集,这些方法用于分配非托管内存、复制非托管内存块、将托管类型转换为非托管类型,此外还提供了在与非托管代码交互时使用的其他杂项方法。
有关此类型所有成员的列表,请参阅 Marshal 成员。
System.Object
System.Runtime.InteropServices.Marsha
[C#]
public sealed class Marshal
[C++]
public __gc __sealed class Marshal
[JScript]
public class Marshal
线程安全
此类型的所有公共静态(Visual Basic 中为 Shared)成员对多线程操作而言都是安全的。但不保证任何实例成员是线程安全的。
备注
在 Marshal 类上定义的静态(在 Visual Basic 中为 Shared)方法对于使用非托管代码很重要。此处定义的大部分方法通常由高级开发人员(他们需要在托管和非托管编程模型之间提供桥梁)在生成自定义封送拆收器时使用。例如,StringToHGlobalAnsi 方法将 ANSI 字符从指定的字符串(在托管堆中)复制到非托管堆中的缓冲区。它还分配大小合适的目标堆,如下面的 C# 代码所示:
String s = "Hello";
IntPtr p = Marshal.StringToHGlobalAnsi(s);
公共语言运行库提供了特定的封送处理功能。有关封送处理行为的详细信息,请参见 Interop 封送处理。
Marshal 类包含许多不同种类的成员。下表将各成员进行分类,这些类别能充分体现其各自的用途。
类别 |
成员 |
高级封送处理 |
GetManagedThunkForUnmanagedMethodPtr、GetUnmanagedThunkForManagedMethodPtr、NumParamBytes |
COM 库函数 |
BindToMoniker、GetActiveObject |
COM 实用工具 |
ChangeWrapperHandleStrength、CreateWrapperOfType、GetComObjectData、GetComSlotForMethodInfo、GetEndComSlot、GetMethodInfoForComSlot、GetStartComSlot、ReleaseComObject、SetComObjectData |
数据转换 |
托管到非托管:Copy、GetComInterfaceForObject、GetIDispatchForObject、GetIUnknownForObject、StringToBSTR、StringToCoTaskMemAnsi、StringToCoTaskMemAuto、StringToCoTaskMemUni、StringToHGlobalAnsi、StringToHGlobalAuto、StringToHGlobalUni、StructureToPtr、UnsafeAddrOfPinnedArrayElement 非托管到托管:Copy、GetObjectForIUnknown、GetObjectForNativeVariant、GetObjectsForNativeVariants、GetTypedObjectForIUnknown、GetTypeForITypeInfo、PtrToStringAnsi、PtrToStringAuto、PtrToStringBSTR、PtrToStringUni 属性:SystemDefaultCharSize、SystemMaxDBCSCharSize |
直接读取和写入 |
ReadByte、ReadInt16、ReadInt32、ReadInt64、ReadIntPtr、WriteByte、WriteInt16、WriteInt32、WriteInt64、WriteIntPtr |
错误处理 |
COM:GetHRForException、ThrowExceptionForHR Win32:GetLastWin32Error、GetExceptionCode、GetExceptionPointers 两者:GetHRForLastWin32Error |
承载实用工具 |
GetThreadFromFiberCookie |
IUnknown |
AddRef、QueryInterface、Release |
内存管理 |
COM:AllocCoTaskMem、ReAllocCoTaskMem、FreeCoTaskMem、FreeBSTR Win32:AllocHGlobal、ReAllocHGlobal、FreeHGlobal 两者:DestroyStructure |
平台调用实用工具 |
Prelink、PrelinkAll、GetHINSTANCE |
结构检查 |
OffsetOf、SizeOf |
类型信息 |
GenerateGuidForType、GenerateProgIdForType、GetTypeInfoName、GetTypeLibGuid、GetTypeLibGuidForAssembly、GetTypeLibLcid、GetTypeLibName、IsComObject、IsTypeVisibleFromCom |