天天看點

System.Runtime.InteropServices.Marshal.Release

System.Runtime.InteropServices.Marshal.Release

提供了一個方法集,這些方法用于配置設定非托管記憶體、複制非托管記憶體塊、将托管類型轉換為非托管類型,此外還提供了在與非托管代碼互動時使用的其他雜項方法。

有關此類型所有成員的清單,請參閱 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

繼續閱讀