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

备注

可将该属性应用于参数、字段或返回值。

该属性为可选属性,因为每个数据类型都有默认的封送处理行为。仅在可以将给定类型封送到多个类型时需要此属性。例如,可将字符串作为 LPStrLPWStrLPTStrBStr 封送到非托管代码。默认情况下,公共语言运行库将字符串参数作为 BStr 封送到 COM 方法。可将 MarshalAsAttribute 属性应用于个别的字段或参数,使该字符串作为 LPStr 而不是 BStr 进行封送。类型库导出程序 (Tlbexp.exe) 将封送处理首选项传递给公共语言运行库。

当用于 COM interop 或平台调用时,某些参数和返回值将具有不同的默认封送处理行为。默认情况下,运行库将字符串参数(以及值类型中的字段)作为 LPStr 封送到平台调用方法或函数。有关更多信息,请参见 默认封送处理行为

大多数情况下,该属性只是使用 UnmanagedType 枚举标识非托管数据的格式,如下面的 C# 签名所示:

void
    MyMethod([MarshalAs(LPStr)] String s);

某些 UnmanagedType 枚举成员需要附加信息。例如,当 UnmanagedTypeLPArray 时需要附加信息。有关如何将此属性用于数组的完整说明,请参见 数组的默认封送处理

类型库导入程序 (Tlbimp.exe) 还将此属性应用于参数、字段及返回值,以指示输入类型库中的数据类型不是相应托管数据类型的默认类型。为清楚起见,Tlbimp.exe 始终将 MarshalAsAttribute 应用于 StringObject 类型,而不管在输入类型库中指定的是何种类型。

提示

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

其他资源

类型库导出程序 (Tlbexp.exe)
类型库导入程序 (Tlbimp.exe)