Marshal类

原创 2004年07月02日 14:31:00

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

 

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

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

[.NET2.0]Marshal类的使用

终于从北京回上海了,第一次听unity开发者大会,感觉讲的都是一些Unity 5新功能的介绍,其实主要还是要靠自己去摸索那些新的功能,主要就是添加了新的GUI系统,貌似集成了NGUI到Unity中,取...
  • s10141303
  • s10141303
  • 2014年04月17日 15:27
  • 2768

Marshal 类

提供了一个方法集,这些方法用于分配非托管内存、复制非托管内存块、将托管类型转换为非托管类型,此外还提供了在与非托管代码交互时使用的其他杂项方法。...
  • courageously
  • courageously
  • 2010年07月12日 22:34
  • 14372

Marshal类的使用

  • 2014年04月17日 23:13
  • 26KB
  • 下载

Marshal类

Marshal类支持从托管内存空间复制数据到非托管内存空间,或是从非托管内存空间到托管内存空间。如果你研究在线的MSDN文档库,你会看到在桌面.NET框架下这个类支持的分配非托管内存空间的方法和其他的...
  • cbbbc
  • cbbbc
  • 2016年08月23日 16:46
  • 513

Marshal类

声明:从MSDN 2005 Express上抄来的,不知道对不对,娃哈哈哈   提供了一系列用于申请非受管内存,拷贝非受管内存块,受管类型转化为非受管类型以及许多于非受管代码打交道的方法。(非受管内存...
  • Apollo_HolyFire
  • Apollo_HolyFire
  • 2004年07月02日 14:31
  • 2200

什么是marshal

  marshal:直译为“编排”,在计算机中特指将数据按某种描述格式编排出来,通常来说一般是从非文本格式到文本格式的数据转化。unmarshal自然是指marshal的逆过程。比如在WebServi...
  • bluishglc
  • bluishglc
  • 2011年06月24日 09:54
  • 9277

利用C#Marshal类实现托管和非托管的相互转换 .

利用C#Marshal类实现托管和非托管的相互转换 Marshal 类 命名空间:System.Runtime.InteropServices 提供了一个方法集,这些...
  • ZCF1002797280
  • ZCF1002797280
  • 2012年10月27日 08:00
  • 483

C#——Marshal.StructureToPtr方法简介

本博客(http://blog.csdn.net/livelylittlefish)贴出作者(三二一、小鱼)相关研究、学习内容所做的笔记,欢迎广大朋友指正!                      ...
  • livelylittlefish
  • livelylittlefish
  • 2008年05月09日 16:54
  • 30301

C# - Marshal.StructureToPtr方法简介

本博客(http://blog.csdn.net/livelylittlefish)贴出作者(三二一、小鱼)相关研究、学习内容所做的笔记,欢 迎广大朋友指正!               ...
  • ybhjx
  • ybhjx
  • 2016年04月06日 12:28
  • 1207

Marshal 类

功能及位置 :                                                                                   将数据从托管对象...
  • ldghd
  • ldghd
  • 2014年01月13日 15:35
  • 520
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Marshal类
举报原因:
原因补充:

(最多只允许输入30个字)