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 参数指向的缓冲区时必需的布局信息。
异常
异常类型 | 条件 |
---|---|
structureType 具有自动布局。但请使用连续或显式布局。 |
备注
可使用此方法释放非托管结构的引用类型字段,如字符串。与其字段不同,结构既可以是值类型也可以是引用类型。包含值类型字段(皆可直接复制到本机结构中)的值类型结构中不包含必须释放其内存的引用。StructureToPtr 使用此方法来防止在重新使用由结构占用的内存时发生内存泄漏。
DestroyStructure 调用 SysFreeString COM API 方法,后者继而释放一个分配的字符串。有关 SysFreeString 的其他信息,请参见 MSDN Library。
除了 DestroyStructure 之外,Marshal 类还提供了其他两个内存释放方法:Marshal.FreeCoTaskMem 和 Marshal.FreeHGlobal。
提示
此方法使用 SecurityAction.LinkDemand 防止不可信代码对它进行调用;只有直接调用方才需要具有 SecurityPermissionAttribute.UnmanagedCode 权限。如果您的代码可从部分受信任的代码调用,则未经验证不要将用户输入传递给 Marshal 类方法。有关使用 LinkDemand 成员的重要限制,请参见 Demand 和 LinkDemand。
.NET Framework 安全性
- SecurityPermission 调用非托管代码的权限。 关联枚举:UnmanagedCode 安全操作:LinkDemand
平台
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