次の方法で共有


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) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。

解説

この属性は、パラメータ、フィールド、または戻り値に適用できます。

各データ型には既定のマーシャリング動作があるため、この属性は省略できます。この属性は、特定の型を複数の型にマーシャリングできる場合にだけ必要です。たとえば、 LPStrLPWStrLPTStr 、または BStr のいずれかとして、文字列をアンマネージ コードにマーシャリングできます。既定では、共通言語ランタイムは BStr として COM メソッドに文字列パラメータをマーシャリングします。 MarshalAsAttribute 属性を個別のフィールドまたはパラメータに適用して、その特定の文字列を BStr ではなく、 LPStr としてマーシャリングできます。 タイプ ライブラリ エクスポータ (Tlbexp.exe) は、指定したマーシャリングの基本設定を共通言語ランタイムに渡します。

一部のパラメータと戻り値では、COM 相互運用またはプラットフォーム呼び出しで使用された場合に、異なる既定のマーシャリング動作が適用されます。既定では、文字列パラメータ (および値型内のフィールド) は、プラットフォーム呼び出しのメソッドまたは関数に対する LPStr としてマーシャリングされます。詳細については、「 既定のマーシャリングの動作 」を参照してください。

ほとんどの場合、次に示す C# シグネチャのように、この属性は単に UnmanagedType 列挙体を使用して、アンマネージ データの書式を識別します。

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

一部の UnmanagedType 列挙体メンバには、追加の情報が必要です。たとえば、 UnmanagedTypeLPArray の場合に、追加の情報が必要になります。配列でのこの属性の使い方の詳細については、「 配列に対する既定のマーシャリング 」を参照してください。

タイプ ライブラリ インポータ (Tlbimp.exe) でも、この属性をパラメータ、フィールド、および戻り値に適用し、入力のタイプ ライブラリのデータ型が対応するマネージ データ型の既定の型ではないことを示します。Tlbimp.exe は、紛らわしいことがないよう、入力のタイプ ライブラリに指定された型に関係なく、常に MarshalAsAttributeString 型と 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)