MarshalAsAttribute クラス
マネージ コードとアンマネージ コード間でデータをマーシャリングする方法を示します。
この型のすべてのメンバの一覧については、MarshalAsAttribute メンバ を参照してください。
System.Object
System.Attribute
System.Runtime.InteropServices.MarshalAsAttribute
<AttributeUsage(AttributeTargets.Field Or _
AttributeTargets.Parameter Or AttributeTargets.ReturnValue)>
NotInheritable Public Class MarshalAsAttribute Inherits Attribute
[C#]
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Parameter
| AttributeTargets.ReturnValue)]
public sealed class MarshalAsAttribute : Attribute
[C++]
[AttributeUsage(AttributeTargets::Field |
AttributeTargets::Parameter | AttributeTargets::ReturnValue)]
public __gc __sealed class MarshalAsAttribute : public Attribute
[JScript]
public
AttributeUsage(AttributeTargets.Field | AttributeTargets.Parameter
| AttributeTargets.ReturnValue)
class MarshalAsAttribute extends Attribute
スレッドセーフ
この型の public static (Visual Basicでは Shared) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。
解説
この属性は、パラメータ、フィールド、または戻り値に適用できます。
各データ型には既定のマーシャリング動作があるため、この属性は省略できます。この属性は、特定の型を複数の型にマーシャリングできる場合にだけ必要です。たとえば、 LPStr 、 LPWStr 、 LPTStr 、または BStr のいずれかとして、文字列をアンマネージ コードにマーシャリングできます。既定では、共通言語ランタイムは BStr として COM メソッドに文字列パラメータをマーシャリングします。 MarshalAsAttribute 属性を個別のフィールドまたはパラメータに適用して、その特定の文字列を BStr ではなく、 LPStr としてマーシャリングできます。 タイプ ライブラリ エクスポータ (Tlbexp.exe) は、指定したマーシャリングの基本設定を共通言語ランタイムに渡します。
一部のパラメータと戻り値では、COM 相互運用またはプラットフォーム呼び出しで使用された場合に、異なる既定のマーシャリング動作が適用されます。既定では、文字列パラメータ (および値型内のフィールド) は、プラットフォーム呼び出しのメソッドまたは関数に対する LPStr としてマーシャリングされます。詳細については、「 既定のマーシャリングの動作 」を参照してください。
ほとんどの場合、次に示す C# シグネチャのように、この属性は単に UnmanagedType 列挙体を使用して、アンマネージ データの書式を識別します。
void MyMethod([MarshalAs(LPStr)] String s);
一部の UnmanagedType 列挙体メンバには、追加の情報が必要です。たとえば、 UnmanagedType が LPArray の場合に、追加の情報が必要になります。配列でのこの属性の使い方の詳細については、「 配列に対する既定のマーシャリング 」を参照してください。
タイプ ライブラリ インポータ (Tlbimp.exe) でも、この属性をパラメータ、フィールド、および戻り値に適用し、入力のタイプ ライブラリのデータ型が対応するマネージ データ型の既定の型ではないことを示します。Tlbimp.exe は、紛らわしいことがないよう、入力のタイプ ライブラリに指定された型に関係なく、常に MarshalAsAttribute を String 型と Object 型に適用します。
使用例
[Visual Basic, C#] パラメータ、フィールド、および戻り値に適用される MarshalAsAttribute をマネージ ソース コードに記述した例を次に示します。
'Applied to a parameter.
Public Sub M1 (<MarshalAs(UnmanagedType.LPWStr)> msg As String)
'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
[C#]
//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();
[C++, JScript] C++ および JScript のサンプルはありません。Visual Basic および C# のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
名前空間: System.Runtime.InteropServices
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ
アセンブリ: Mscorlib (Mscorlib.dll 内)
参照
MarshalAsAttribute メンバ | System.Runtime.InteropServices 名前空間 | UnmanagedType | タイプ ライブラリ エクスポータ (Tlbexp.exe) | タイプ ライブラリ インポータ (Tlbimp.exe)