UnmanagedType 列挙型

定義

パラメーターまたはフィールドをアンマネージ コードにマーシャリングする方法を示します。

public enum class UnmanagedType
public enum UnmanagedType
[System.Serializable]
public enum UnmanagedType
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public enum UnmanagedType
type UnmanagedType = 
[<System.Serializable>]
type UnmanagedType = 
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type UnmanagedType = 
Public Enum UnmanagedType
継承
UnmanagedType
属性

フィールド

AnsiBStr 35

長さを示すプレフィックスを付けた 1 バイトの ANSI 文字列。 このメンバーは String データ型で使用できます。

AsAny 40

実行時にオブジェクトの型を確認し、その型としてオブジェクトをマーシャリングする動的な型。 このメンバーは、プラットフォーム呼び出しメソッドにのみ有効です。

Bool 2

4 バイトの Boolean 値 (true != 0、false = 0)。 これは Win32 BOOL 型です。

BStr 19

長さを示すプリフィックスを付けた 2 バイトの Unicode 文字列。 このメンバー (COM の既定の文字列) は、String データ型で使用できます。

ByValArray 30

Value プロパティを ByValArray に設定した場合、SizeConst フィールドは、配列の要素数を示すように設定する必要があります。 ArraySubType フィールドには、文字列型を区別する必要がある場合に、オプションとして配列要素の UnmanagedType を格納できます。 この UnmanagedType は、要素が構造体にフィールドとして定義されている配列でのみ使用できます。

ByValTStr 23

構造体に定義されているインライン固定長文字配列で使用します。 ByValTStr 型は、構造体内の C スタイルの固定サイズの文字列 (例: char s[5]) のように動作します。 ByValTStr で使用する文字型は、格納される構造体に適用する StructLayoutAttribute 属性の引数 CharSet によって決定されます。 配列のサイズを示す場合は、常に SizeConst フィールドを使用します。

Currency 15

通貨型。 10 進値を Decimal ではなく、COM 通貨型としてマーシャリングするために、Decimal で使用します。

CustomMarshaler 44

MarshalType または MarshalTypeRef フィールドと共に使用する場合に、カスタム マーシャラー クラスを指定します。 MarshalCookie フィールドは、カスタム マーシャラーに追加の情報を渡すために使用できます。 このメンバーは任意の参照型で使用できます。 このメンバーは、パラメーターと戻り値にのみ有効です。 フィールドでは使用できません。

Error 45

I4 または U4 に関連付けられたネイティブな型。この型により、パラメーターはエクスポート先のタイプ ライブラリに HRESULT としてエクスポートされます。

FunctionPtr 38

C スタイルの関数ポインターとして使用できる整数値。 このメンバーは、Delegate データ型または Delegate から継承した型で使用できます。

HString 47

Windows ランタイム文字列。 このメンバーは String データ型で使用できます。 .NET 5 で WinRT の組み込みサポートが削除されました。 回避策については、「 以前にサポートされている組み込みの型 」を参照してください。

I1 3

1 バイト符号付き整数。 このメンバーを使用すると、Boolean 値を 1 バイトの C スタイル bool (true = 1、false = 0) に変換できます。

I2 5

2 バイト符号付き整数。

I4 7

4 バイト符号付き整数。

I8 9

8 バイト符号付き整数。

IDispatch 26

COM の IDispatch ポインター (Microsoft Visual Basic 6.0 では Object)。

IInspectable 46

Windows ランタイム インターフェイス ポインター。 このメンバーは Object データ型で使用できます。 .NET 5 で WinRT の組み込みサポートが削除されました

Interface 28

COM インターフェイス ポインター。 インターフェイスの Guid は、クラス メタデータから取得します。 インターフェイス型を直接指定する場合、またはクラスに適用する場合は既定のインターフェイス型を指定する場合に、このメンバーを使用します。 このメンバーは、Object データ型に適用すると、IUnknown と同じ動作を生成します。

IUnknown 25

COM IUnknown ポインター。 このメンバーは Object データ型で使用できます。

LPArray 42

C スタイル配列の最初の要素へのポインター。 マネージド コードからアンマネージド コードにマーシャリングする場合、配列長はマネージド配列長によって決定されます。 アンマネージド コードからマネージド コードにマーシャリングする場合、配列の長さは SizeConst フィールドと SizeParamIndex フィールドによって決まります。文字列の型を区別する必要がある場合は、配列内の要素のアンマネージド型も考慮されます。

LPStr 20

終端が null の 1 バイトの ANSI 文字列。 このメンバーは、String データ型および StringBuilder データ型で使用できます。

LPStruct 43

マネージド書式指定クラスをマーシャリングするときに使用する C スタイル構造体へのポインター。 このメンバーは、プラットフォーム呼び出しメソッドにのみ有効です。

LPTStr 22

Unicode 文字列。 型 LPTStr の文字列のエクスポートがサポートされていないため、この値は COM 相互運用ではサポートされず、プラットフォーム呼び出しのみでサポートされます。

LPUTF8Str 48

UTF-8 でエンコードされた文字列へのポインター。

LPWStr 21

終端が null の 2 バイトの Unicode 文字列。 文字列がアンマネージド CoTaskMemAlloc 関数を使用して作成されない限り、アンマネージド文字列で LPWStr 値を使用することはできません。

R4 11

4 バイトの浮動小数点数。

R8 12

8 バイトの浮動小数点数。

SafeArray 29

SafeArray は、関連付けられた配列データの型、ランク、および境界を格納する自己記述型の配列です。 SafeArraySubType フィールドと併せてこのメンバーを使用することによって、既定の要素の型をオーバーライドできます。

Struct 27

マネージド書式指定クラスと値型をマーシャリングするために使用する VARIANT。

SysInt 31

プラットフォーム依存、符号付き整数: 32 ビット Windows では 4 バイト、64 ビット Windows では 8 バイト。

SysUInt 32

プラットフォーム依存、符号なし整数: 32 ビット Windows では 4 バイト、64 ビット Windows では 8 バイト。

TBStr 36

長さのプレフィックスが付いた Unicode char 文字列。 この BSTR に似たメンバーを使用することはほとんどありません。

U1 4

1 バイト符号なし整数。

U2 6

2 バイト符号なし整数。

U4 8

4 バイト符号なし整数。

U8 10

8 バイト符号なし整数。

VariantBool 37

2 バイトの OLE 定義 VARIANT_BOOL 型 (true = -1、false = 0)。

VBByRefStr 34

Visual Basic で、アンマネージド コードの文字列を変更し、結果をマネージド コードに反映できるようにする値。 この値は、プラットフォーム呼び出しでだけサポートされます。

次のコード フラグメントは、COM コンポーネントによって実装されるアンマネージ インターフェイスをマネージド ソース コードで宣言する方法を示しています。 属性を System.Runtime.InteropServices.ComImportAttribute 使用すると、 IMyStorage COM で使用するためにインターフェイスをエクスポートし直すのを防ぐことができます。 (COM クライアントは、既存の COM コンポーネントを直接使用する必要があります)。この例では、 MarshalAsAttribute は、元の COM インターフェイスで使用される型を表す複数 UnmanagedType のメンバーを指定します。

using namespace System;
using namespace System::Runtime::InteropServices;

// If you do not have a type library for an interface
// you can redeclare it using ComImportAttribute.
// This is how the interface would look in an idl file.
//[
//object,
//uuid("73EB4AF8-BE9C-4b49-B3A4-24F4FF657B26"),
//dual, helpstring("IMyStorage Interface"),
//pointer_default(unique)
//]
//interface IMyStorage : IDispatch
//{
// [id(1)]
// HRESULT GetItem([in] BSTR bstrName, [out, retval] IDispatch ** ppItem);
// [id(2)]
// HRESULT GetItems([in] BSTR bstrLocation, [out] SAFEARRAY(VARIANT)* pItems);
// [id(3)]
// HRESULT GetItemDescriptions([in] BSTR bstrLocation, [out] SAFEARRAY(VARIANT) ** ppItems);
// [id(4), propget]
// HRESULT get_IsEmpty([out, retval] BOOL * pfEmpty);
//};
// This is the managed declaration.

[ComImport]
[Guid("73EB4AF8-BE9C-4b49-B3A4-24F4FF657B26")]
interface class IMyStorage
{
   [DispId(1)]
   Object^ GetItem( [In,MarshalAs(UnmanagedType::BStr)]String^ bstrName );

   //[return : MarshalAs(UnmanagedType::Interface)]

   [DispId(2)]
   void GetItems( [In,MarshalAs(UnmanagedType::BStr)]String^ bstrLocation, [Out,MarshalAs(UnmanagedType::SafeArray,
   SafeArraySubType=VarEnum::VT_VARIANT)]array<Object^>^Items );

   [DispId(3)]
   void GetItemDescriptions( [In]String^ bstrLocation, [In,Out,MarshalAs(UnmanagedType::SafeArray)]array<Object^>^varDescriptions );

   property bool IsEmpty 
   {
      [DispId(4)]
      [returnvalue:MarshalAs(UnmanagedType::VariantBool)]
      bool get();
   }
};
using System;
using System.Runtime.InteropServices;

namespace MyModule
{
    // If you do not have a type library for an interface
    // you can redeclare it using ComImportAttribute.

    // This is how the interface would look in an idl file.

    //[
    //object,
    //uuid("73EB4AF8-BE9C-4b49-B3A4-24F4FF657B26"),
    //dual,	helpstring("IMyStorage Interface"),
    //pointer_default(unique)
    //]
    //interface IMyStorage : IDispatch
    //{
    //	[id(1)]
    //	HRESULT GetItem([in] BSTR bstrName, [out, retval] IDispatch ** ppItem);
    //	[id(2)]
    //	HRESULT GetItems([in] BSTR bstrLocation, [out] SAFEARRAY(VARIANT)* pItems);
    //	[id(3)]
    //	HRESULT GetItemDescriptions([in] BSTR bstrLocation, [out] SAFEARRAY(VARIANT) ** ppItems);
    //	[id(4), propget]
    //	HRESULT get_IsEmpty([out, retval] BOOL * pfEmpty);
    //};

    // This is the managed declaration.

    [ComImport]
    [Guid("73EB4AF8-BE9C-4b49-B3A4-24F4FF657B26")]
    public interface IMyStorage
    {
        [DispId(1)]
        [return: MarshalAs(UnmanagedType.Interface)]
        object GetItem([In, MarshalAs(UnmanagedType.BStr)] String bstrName);

        [DispId(2)]
        void GetItems([In, MarshalAs(UnmanagedType.BStr)] String bstrLocation,
            [Out, MarshalAs( UnmanagedType.SafeArray,
                      SafeArraySubType = VarEnum.VT_VARIANT )] out Object[] Items);

        [DispId(3)]
        void GetItemDescriptions([In] String bstrLocation,
            [In, Out, MarshalAs(UnmanagedType.SafeArray)] ref Object[] varDescriptions);

        bool IsEmpty
        {
            [DispId(4)]
            [return: MarshalAs(UnmanagedType.VariantBool)]
            get;
        }
    }
}
Imports System.Runtime.InteropServices

Module MyModule
    ' If you do not have a type library for an interface
    ' you can redeclare it using ComImportAttribute.

    ' This is how the interface would look in an idl file.

    '[
    'object,
    'uuid("73EB4AF8-BE9C-4b49-B3A4-24F4FF657B26"),
    'dual,	helpstring("IMyStorage Interface"),
    'pointer_default(unique)
    ']
    'interface IMyStorage : IDispatch
    '{
    '	[id(1)]
    '	HRESULT GetItem([in] BSTR bstrName, [out, retval] IDispatch ** ppItem);
    '	[id(2)]
    '	HRESULT GetItems([in] BSTR bstrLocation, [out] SAFEARRAY(VARIANT)* pItems);
    '	[id(3)]
    '	HRESULT GetItemDescriptions([in] BSTR bstrLocation, [out] SAFEARRAY(VARIANT) ** ppItems);
    '	[id(4), propget]
    '	HRESULT get_IsEmpty([out, retval] BOOL * pfEmpty);
    '};

    ' This is the managed declaration.

    <ComImport(), Guid("73EB4AF8-BE9C-4b49-B3A4-24F4FF657B26")> _
    Public Interface IMyStorage
        <DispId(1)> _
        Function GetItem(<InAttribute(), MarshalAs(UnmanagedType.BStr)> ByVal bstrName As String) _
           As <MarshalAs(UnmanagedType.Interface)> Object

        <DispId(2)> _
        Function GetItems(<InAttribute(), MarshalAs(UnmanagedType.BStr)> ByVal bstrLocation As String, _
           <OutAttribute(), MarshalAs(UnmanagedType.SafeArray, SafeArraySubType := VarEnum.VT_VARIANT)> _
                                      ByVal Items() As Object)

        <DispId(3)> _
        Function GetItemDescriptions(<InAttribute()> ByVal bstrLocation As String, _
           <InAttribute(), OutAttribute(), _
                      MarshalAs(UnmanagedType.SafeArray)> ByRef varDescriptions() As Object)

        <DispId(4)> _
        ReadOnly Property IsEmpty(<MarshalAs(UnmanagedType.VariantBool)> ByVal bEmpty As Boolean)

    End Interface
End Module

注釈

列挙型と UnmanagedType 属性を System.Runtime.InteropServices.MarshalAsAttribute 使用して、アンマネージ コードとの相互運用時に型をマーシャリングする方法を指定します。 この列挙を使用すると、単純な値型 (I1、I2、I4、I8、R4、R8、U2、U4、U8)、.NET Frameworkで使用できないアンマネージ型、およびその他のさまざまな型を使用してコードをマーシャリングできます。

詳細については、「アンマネージ コードとの相互運用」を参照してください。

適用対象

こちらもご覧ください