MarshalAsAttribute 类
指示如何在托管代码和非托管代码之间封送数据。
**命名空间:**System.Runtime.InteropServices
**程序集:**mscorlib(在 mscorlib.dll 中)
语法
声明
<AttributeUsageAttribute(AttributeTargets.Field Or AttributeTargets.Parameter Or AttributeTargets.ReturnValue, Inherited:=False)> _
<ComVisibleAttribute(True)> _
Public NotInheritable Class MarshalAsAttribute
Inherits Attribute
用法
Dim instance As MarshalAsAttribute
[AttributeUsageAttribute(AttributeTargets.Field|AttributeTargets.Parameter|AttributeTargets.ReturnValue, Inherited=false)]
[ComVisibleAttribute(true)]
public sealed class MarshalAsAttribute : Attribute
[AttributeUsageAttribute(AttributeTargets::Field|AttributeTargets::Parameter|AttributeTargets::ReturnValue, Inherited=false)]
[ComVisibleAttribute(true)]
public ref class MarshalAsAttribute sealed : public Attribute
/** @attribute AttributeUsageAttribute(AttributeTargets.Field|AttributeTargets.Parameter|AttributeTargets.ReturnValue, Inherited=false) */
/** @attribute ComVisibleAttribute(true) */
public final class MarshalAsAttribute extends Attribute
AttributeUsageAttribute(AttributeTargets.Field|AttributeTargets.Parameter|AttributeTargets.ReturnValue, Inherited=false)
ComVisibleAttribute(true)
public final class MarshalAsAttribute extends Attribute
备注
可将该属性应用于参数、字段或返回值。
该属性为可选属性,因为每个数据类型都有默认的封送处理行为。仅在可以将给定类型封送到多个类型时需要此属性。例如,可将字符串作为 LPStr、LPWStr、LPTStr 或 BStr 封送到非托管代码。默认情况下,公共语言运行库将字符串参数作为 BStr 封送到 COM 方法。可将 MarshalAsAttribute 属性应用于个别的字段或参数,使该字符串作为 LPStr 而不是 BStr 进行封送。类型库导出程序 (Tlbexp.exe) 将封送处理首选项传递给公共语言运行库。
当用于 COM interop 或平台调用时,某些参数和返回值将具有不同的默认封送处理行为。默认情况下,运行库将字符串参数(以及值类型中的字段)作为 LPStr 封送到平台调用方法或函数。有关更多信息,请参见 默认封送处理行为。
大多数情况下,该属性只是使用 UnmanagedType 枚举标识非托管数据的格式,如下面的 C# 签名所示:
void
MyMethod([MarshalAs(LPStr)] String s);
某些 UnmanagedType 枚举成员需要附加信息。例如,当 UnmanagedType 为 LPArray 时需要附加信息。有关如何将此属性用于数组的完整说明,请参见 数组的默认封送处理。
类型库导入程序 (Tlbimp.exe) 还将此属性应用于参数、字段及返回值,以指示输入类型库中的数据类型不是相应托管数据类型的默认类型。为清楚起见,Tlbimp.exe 始终将 MarshalAsAttribute 应用于 String 和 Object 类型,而不管在输入类型库中指定的是何种类型。
提示
MarshalAsAttribute 不支持泛型类型的封送处理。
示例
下面的示例显示当应用于参数、字段及返回值时,MarshalAsAttribute 在托管源代码中所处的位置。
Imports System.Runtime.InteropServices
Module Program
'Applied to a parameter.
Public Sub M1(<MarshalAs(UnmanagedType.LPWStr)> ByVal msg As String)
End Sub
'Applied to a field within a class.
Class MsgText
<MarshalAs(UnmanagedType.LPWStr)> Public msg As String
End Class
'Applied to a a return value.
Public Function M2() As <MarshalAs(UnmanagedType.LPWStr)> String
End Function
End Module
//Applied to a parameter.
public void M1 ([MarshalAs(UnmanagedType.LPWStr)]String msg);
//Applied to a field within a class.
class MsgText {
[MarshalAs(UnmanagedType.LPWStr)] public String msg;
}
//Applied to a return value.
[return: MarshalAs(UnmanagedType.LPWStr)]
public String GetMessage();
继承层次结构
System.Object
System.Attribute
System.Runtime.InteropServices.MarshalAsAttribute
线程安全
此类型的任何公共静态(Visual Basic 中的 Shared)成员都是线程安全的,但不保证所有实例成员都是线程安全的。
平台
Windows 98、Windows 2000 SP4、Windows CE、Windows Millennium Edition、Windows Mobile for Pocket PC、Windows Mobile for Smartphone、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
.NET Compact Framework
受以下版本支持:2.0
请参见
参考
MarshalAsAttribute 成员
System.Runtime.InteropServices 命名空间
UnmanagedType