System.Runtime.InteropServices.Marshal.Release

System.Runtime.InteropServices.Marshal.Release

提供了一个方法集,这些方法用于分配非托管内存、复制非托管内存块、将托管类型转换为非托管类型,此外还提供了在与非托管代码交互时使用的其他杂项方法。

有关此类型所有成员的列表,请参阅 Marshal 成员

System.Object
   System.Runtime.InteropServices.Marsha

 

public sealed class Marshal

 

 

 

线程安全

此类型的所有公共静态(Visual Basic 中为 Shared)成员对多线程操作而言都是安全的。但不保证任何实例成员是线程安全的。

备注

Marshal 类上定义的静态(在 Visual Basic 中为 Shared)方法对于使用非托管代码很重要。此处定义的大部分方法通常由高级开发人员(他们需要在托管和非托管编程模型之间提供桥梁)在生成自定义封送拆收器时使用。例如,StringToHGlobalAnsi 方法将 ANSI 字符从指定的字符串(在托管堆中)复制到非托管堆中的缓冲区。它还分配大小合适的目标堆,如下面的 C# 代码所示:

String s = "Hello";
    IntPtr p = Marshal.StringToHGlobalAnsi(s);

 

公共语言运行库提供了特定的封送处理功能。有关封送处理行为的详细信息,请参见 Interop 封送处理。

Marshal 类包含许多不同种类的成员。下表将各成员进行分类,这些类别能充分体现其各自的用途。

类别成员
高级封送处理GetManagedThunkForUnmanagedMethodPtrGetUnmanagedThunkForManagedMethodPtrNumParamBytes
COM 库函数BindToMonikerGetActiveObject
COM 实用工具ChangeWrapperHandleStrengthCreateWrapperOfTypeGetComObjectDataGetComSlotForMethodInfoGetEndComSlotGetMethodInfoForComSlotGetStartComSlotReleaseComObjectSetComObjectData
数据转换托管到非托管:CopyGetComInterfaceForObjectGetIDispatchForObjectGetIUnknownForObjectStringToBSTRStringToCoTaskMemAnsiStringToCoTaskMemAutoStringToCoTaskMemUniStringToHGlobalAnsiStringToHGlobalAutoStringToHGlobalUniStructureToPtrUnsafeAddrOfPinnedArrayElement

非托管到托管:CopyGetObjectForIUnknownGetObjectForNativeVariantGetObjectsForNativeVariantsGetTypedObjectForIUnknownGetTypeForITypeInfoPtrToStringAnsiPtrToStringAutoPtrToStringBSTRPtrToStringUni

属性:SystemDefaultCharSizeSystemMaxDBCSCharSize

直接读取和写入ReadByteReadInt16ReadInt32ReadInt64ReadIntPtrWriteByteWriteInt16WriteInt32WriteInt64WriteIntPtr
错误处理COM:GetHRForExceptionThrowExceptionForHR

Win32:GetLastWin32ErrorGetExceptionCodeGetExceptionPointers

两者:GetHRForLastWin32Error

承载实用工具GetThreadFromFiberCookie
IUnknownAddRefQueryInterfaceRelease
内存管理COM:AllocCoTaskMemReAllocCoTaskMemFreeCoTaskMemFreeBSTR

Win32:AllocHGlobalReAllocHGlobalFreeHGlobal

两者:DestroyStructure

平台调用实用工具PrelinkPrelinkAllGetHINSTANCE
结构检查OffsetOfSizeOf
类型信息GenerateGuidForTypeGenerateProgIdForTypeGetTypeInfoNameGetTypeLibGuidGetTypeLibGuidForAssemblyGetTypeLibLcidGetTypeLibNameIsComObjectIsTypeVisibleFromCom

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值