Marshal.DestroyStructure 方法

释放指定的非托管内存块所指向的所有子结构。

**命名空间:**System.Runtime.InteropServices
**程序集:**mscorlib(在 mscorlib.dll 中)

语法

声明
<ComVisibleAttribute(True)> _
Public Shared Sub DestroyStructure ( _
    ptr As IntPtr, _
    structuretype As Type _
)
用法
Dim ptr As IntPtr
Dim structuretype As Type

Marshal.DestroyStructure(ptr, structuretype)
[ComVisibleAttribute(true)] 
public static void DestroyStructure (
    IntPtr ptr,
    Type structuretype
)
[ComVisibleAttribute(true)] 
public:
static void DestroyStructure (
    IntPtr ptr, 
    Type^ structuretype
)
/** @attribute ComVisibleAttribute(true) */ 
public static void DestroyStructure (
    IntPtr ptr, 
    Type structuretype
)
ComVisibleAttribute(true) 
public static function DestroyStructure (
    ptr : IntPtr, 
    structuretype : Type
)

参数

  • ptr
    指向非托管内存块的指针。
  • structuretype
    格式化类的类型。该类型提供删除 ptr 参数指向的缓冲区时必需的布局信息。

异常

异常类型 条件

ArgumentException

structureType 具有自动布局。但请使用连续或显式布局。

备注

可使用此方法释放非托管结构的引用类型字段,如字符串。与其字段不同,结构既可以是值类型也可以是引用类型。包含值类型字段(皆可直接复制到本机结构中)的值类型结构中不包含必须释放其内存的引用。StructureToPtr 使用此方法来防止在重新使用由结构占用的内存时发生内存泄漏。

DestroyStructure 调用 SysFreeString COM API 方法,后者继而释放一个分配的字符串。有关 SysFreeString 的其他信息,请参见 MSDN Library。

除了 DestroyStructure 之外,Marshal 类还提供了其他两个内存释放方法:Marshal.FreeCoTaskMemMarshal.FreeHGlobal

提示

此方法使用 SecurityAction.LinkDemand 防止不可信代码对它进行调用;只有直接调用方才需要具有 SecurityPermissionAttribute.UnmanagedCode 权限。如果您的代码可从部分受信任的代码调用,则未经验证不要将用户输入传递给 Marshal 类方法。有关使用 LinkDemand 成员的重要限制,请参见 Demand 和 LinkDemand

.NET Framework 安全性

平台

Windows 98、Windows 2000 SP4、Windows Millennium Edition、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition

.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求

版本信息

.NET Framework

受以下版本支持:2.0、1.1、1.0

请参见

参考

Marshal 类
Marshal 成员
System.Runtime.InteropServices 命名空间
FreeCoTaskMem
FreeHGlobal