Marshal类

声明:从MSDN 2005 Express上抄来的,不知道对不对,娃哈哈哈

 

提供了一系列用于申请非受管内存,拷贝非受管内存块,受管类型转化为非受管类型以及许多于非受管代码打交道的方法。(非受管内存看起来好难受,怎么说呢,内存现在有受管的也就是被垃圾自动回收机制管理的;和非受管的那就是需要手动管理的啦,这两种区别了,历史遗留问题向来都是难解决的)

Namespace: System.Runtime.InteropServices
Assembly: mscorlib (in mscorlib.dll)

原型

Visual Basic

NotInheritable MustInherit Public Class Marshal

 

C#

public sealed abstract class Marshal

 

C++

public __gc __sealed __abstract class Marshal

 

 

JScript

public abstract class Marshal

 

Marshal类所提供这些静态方法主要是用作和非受管代码打交道的。大多数的方法是能让那些需要在受管和非受管模块之间建立桥梁的开发者自定义散列行为的高级应用。比如说,有这样一个方法StringToHGlobalAnsi他能够在一个指定的string实例中读取字符串(字符串处于受管堆中),然后放入非受管的缓冲区中(缓冲区在非受管的堆中),同时该缓冲区也被分配为合适的大小。 C#代码如下:

 String s = "Hello";

 IntPtr p = Marshal.StringToHGlobalAnsi(s);

这时候p可以认为是一个指向的Ansi字符串"Hello"的指针哦。

common language runtime是如何提供散列功能的。欲知详情,请参考Interop Marshaling

Marshal有着众多的成员,为了更好的了解他们,我们把成员按照用途进行了划分(软件以用为本,不记得是谁说的这句话,我承认有点道理)。

类别

成员

Advanced marshaling

高级

(看样子是没法分才分到这一类的,MS也学会了自卖自夸啊)

GetManagedThunkForUnmanagedMethodPtr,

GetUnmanagedThunkForManagedMethodPtr,

 NumParamBytes

COM library function

COM 库函数

(千万别以为是串口

BindToMoniker,

GetActiveObject

COM utilities

COM 相关

ChangeWrapperHandleStrength, CreateWrapperOfType,

GetComObjectData,

GetComSlotForMethodInfo,

GetEndComSlot,

GetMethodInfoForComSlot, GetStartComSlot,

ReleaseComObject,

SetComObjectData

Data transformation

数据传输/转化

Managed to unmanaged: Copy, GetComInterfaceForObject, GetIDispatchForObject, GetIUnknownForObject, StringToBSTR, StringToCoTaskMemAnsi, StringToCoTaskMemAuto, StringToCoTaskMemUni, StringToHGlobalAnsi, StringToHGlobalAuto, StringToHGlobalUni, StructureToPtr, UnsafeAddrOfPinnedArrayElement

Unmanaged to managed: Copy, GetObjectForIUnknown, GetObjectForNativeVariant, GetObjectsForNativeVariants, GetTypedObjectForIUnknown, GetTypeForITypeInfo, PtrToStringAnsi, PtrToStringAuto, PtrToStringBSTR, PtrToStringUni

Properties: SystemDefaultCharSize, SystemMaxDBCSCharSize

Direct reading and writing

直接存取

ReadByte,

ReadInt16,

ReadInt32,

ReadInt64,

 ReadIntPtr,

WriteByte,

WriteInt16,

WriteInt32,

WriteInt64,

 WriteIntPtr

Error handling

出错处理

COM: GetHRForException, ThrowExceptionForHR

Win32: GetLastWin32Error, GetExceptionCode, GetExceptionPointers

Both: GetHRForLastWin32Error

Hosting utilities

GetThreadFromFiberCookie

IUnknown

AddRef,

QueryInterface,

Release

Memory management

内存管理

COM: AllocCoTaskMem, ReAllocCoTaskMem, FreeCoTaskMem, FreeBSTR

Win32: AllocHGlobal, ReAllocHGlobal, FreeHGlobal

Both: DestroyStructure

Platform invoke utilities

平台调用

Prelink, PrelinkAll, GetHINSTANCE

Structure inspection

结构信息

OffsetOf, SizeOf

Type information

类型

GenerateGuidForType,

GenerateProgIdForType,

GetTypeInfoName,

 GetTypeLibGuid,

GetTypeLibGuidForAssembly,

GetTypeLibLcid,

GetTypeLibName,

IsComObject,

 IsTypeVisibleFromCom

继承层次

   System.Object

         System.Runtime.InteropServices.Marshal

线程安全

只能说一部分public static (支持Visual Basic)成员是线程安全的,而另一些就不能保证了。

开发平台

Windows 2000, and Windows XP Home Edition, Windows XP Professional, Windows Server 2003

NET Framework版本支持1.12.0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值