UnmanagedType 列挙体とは? わかりやすく解説

UnmanagedType 列挙体

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

名前空間: System.Runtime.InteropServices
アセンブリ: mscorlib (mscorlib.dll 内)
構文構文

<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Enumeration UnmanagedType
Dim instance As UnmanagedType
[SerializableAttribute] 
[ComVisibleAttribute(true)] 
public enum UnmanagedType
[SerializableAttribute] 
[ComVisibleAttribute(true)] 
public enum class UnmanagedType
/** @attribute SerializableAttribute() */ 
/** @attribute ComVisibleAttribute(true) */ 
public enum UnmanagedType
SerializableAttribute 
ComVisibleAttribute(true) 
public enum UnmanagedType
メンバメンバ
 メンバ名説明
.NET Compact Framework によるサポートAnsiBStr長さを示すプリフィックスを付けた 1 バイトの ANSI 文字列。このメンバは String データ型で使用できます。 
.NET Compact Framework によるサポートAsAny実行時にオブジェクトの型を確認し、その型としてオブジェクトをマーシャリングする動的な型。プラットフォーム呼び出しのメソッドでだけ有効です。 
.NET Compact Framework によるサポートBool4 バイトの Boolean 値 (true != 0、false = 0)。これは Win32 BOOL 型です。 
.NET Compact Framework によるサポートBStr長さを示すプリフィックスを付けた 2 バイトの Unicode 文字列。このメンバ (COM の既定の文字列) は、String データ型で使用できます。 
.NET Compact Framework によるサポートByValArrayMarshalAsAttribute.Value を ByValArray に設定した場合、SizeConst は、配列の要素数を示すように設定する必要があります。ArraySubType フィールドには、文字列型を区別する必要がある場合に、オプションとして配列要素の UnmanagedType を格納できます。この UnmanagedType は、構造体にフィールドとして定義されている配列だけで使用できます。 
.NET Compact Framework によるサポートByValTStr構造体に定義されているインライン固定長文字配列で使用します。ByValTStr で使用する文字型は、格納される構造体に適用する System.Runtime.InteropServices.StructLayoutAttribute の引数 System.Runtime.InteropServices.CharSet によって決定されます。配列のサイズを示す場合は、常に MarshalAsAttribute.SizeConst フィールドを使用します。 

.NET Framework の ByValTStr 型は、構造体内の C スタイルの固定サイズ文字列 (char s[5] など) と同様に機能します。マネージ コードでのこの動作は、Microsoft Visual Basic 6.0 の動作 (終端が null でない。例 :MyString As String * 5) とは異なります。

.NET Compact Framework によるサポートCurrency10 進値を Decimal ではなく、COM 通貨型としてマーシャリングするために、System.Decimal で使用します。 
.NET Compact Framework によるサポートCustomMarshalerMarshalAsAttribute.MarshalType または MarshalAsAttribute.MarshalTypeRef と共に使用する場合に、カスタム マーシャラ クラスを指定します。MarshalAsAttribute.MarshalCookie フィールドは、カスタム マーシャラに追加の情報を渡すために使用できます。このメンバは任意の参照型で使用できます。 
.NET Compact Framework によるサポートErrorI4 または U4 に関連付けられたこのネイティブな型によって、パラメータはエクスポート先のタイプ ライブラリに HRESULT としてエクスポートされます。 
.NET Compact Framework によるサポートFunctionPtrC スタイルの関数ポインタとして使用できる整数値。このメンバは、Delegate データ型または Delegate から継承した型で使用できます。 
.NET Compact Framework によるサポートI11 バイト符号付き整数。このメンバを使用すると、Boolean 値を 1 バイトの C スタイル bool (true = 1、false = 0) に変換できます。 
.NET Compact Framework によるサポートI22 バイト符号付き整数。 
.NET Compact Framework によるサポートI44 バイト符号付き整数。 
.NET Compact Framework によるサポートI88 バイト符号付き整数。 
.NET Compact Framework によるサポートIDispatchCOM の IDispatch ポインタ (Microsoft Visual Basic 6.0 では Object)。 
.NET Compact Framework によるサポートInterfaceCOM インターフェイス ポインタ。インターフェイスの Guid は、クラス メタデータから取得します。インターフェイス型を直接指定する場合、またはクラスに適用する場合は既定のインターフェイス型を指定する場合に、このメンバを使用します。このメンバは、Object データ型に適用すると、UnmanagedType.IUnknown 動作を生成します。 
.NET Compact Framework によるサポートIUnknownCOM IUnknown ポインタ。このメンバは Object データ型で使用できます。 
.NET Compact Framework によるサポートLPArrayC スタイル配列の最初の要素へのポインタ。マネージからアンマネージにマーシャリングする場合、配列長はマネージ配列長によって決定されます。アンマネージからマネージにマーシャリングする場合、配列の長さは MarshalAsAttribute.SizeConst フィールドと MarshalAsAttribute.SizeParamIndex フィールドによって決まります。文字列の型を区別する必要がある場合は、配列内の要素のアンマネージ型も考慮されます。 
.NET Compact Framework によるサポートLPStr終端が null の 1 バイトの ANSI 文字列。このメンバは、System.String データ型または System.Text.StringBuilder データ型で使用できます。 
.NET Compact Framework によるサポートLPStructマネージ書式指定クラスをマーシャリングするときに使用する C スタイル構造体へのポインタ。プラットフォーム呼び出しのメソッドでだけ有効です。 
.NET Compact Framework によるサポートLPTStrプラットフォームに依存する文字列。Windows 98 では ANSI、Windows NT と Windows XP では Unicode。型 LPTStr の文字列のエクスポートがサポートされていないため、この値は COM 相互運用ではサポートされず、プラットフォーム呼び出しだけでサポートされます。 
.NET Compact Framework によるサポートLPWStr終端が null の 2 バイトの Unicode 文字列。 

文字列がアンマネージ CoTaskMemAlloc 関数を使用して作成されていない場合、アンマネージ文字列で LPWStr 値を使用することはできません。

.NET Compact Framework によるサポートR44 バイトの浮動小数点数。 
.NET Compact Framework によるサポートR88 バイトの浮動小数点数。 
.NET Compact Framework によるサポートSafeArraySafeArray は、関連付けられた配列データの型、ランク、および境界を格納する自己記述型の配列です。MarshalAsAttribute.SafeArraySubType フィールドと併せてこのメンバを使用することによって、既定の要素の型をオーバーライドできます。 
.NET Compact Framework によるサポートStructマネージ書式指定クラスと値型をマーシャリングするために使用する VARIANT。 
.NET Compact Framework によるサポートSysIntプラットフォームに依存する符号付き整数。32 ビット Windows では 4 バイト、64 ビット Windows では 8 バイト。 
.NET Compact Framework によるサポートSysUIntプラットフォームに依存する符号なし整数。32 ビット Windows では 4 バイト、64 ビット Windows では 8 バイト。 
.NET Compact Framework によるサポートTBStr長さを示すプリフィックスを付けた、プラットフォームに依存する char 文字列。Windows 98 では ANSI、Windows NT では Unicode。この BSTR に似たメンバを使用することはほとんどありません。 
.NET Compact Framework によるサポートU11 バイト符号なし整数。 
.NET Compact Framework によるサポートU22 バイト符号なし整数。 
.NET Compact Framework によるサポートU44 バイト符号なし整数。 
.NET Compact Framework によるサポートU88 バイト符号なし整数。 
.NET Compact Framework によるサポートVariantBool2 バイトの OLE 定義 VARIANT_BOOL 型 (true = -1、false = 0)。 
.NET Compact Framework によるサポートVBByRefStrVisual Basic 2005 で、アンマネージ コードの文字列を変更し、結果をマネージ コードに反映できるようにします。この値は、プラットフォーム呼び出しでだけサポートされます。 
解説解説

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

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

使用例使用例

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

Imports System
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)> 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
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;
        }
    }
}
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();
   }
};
import System.*;
import 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.
    /** @attribute ComImport()
     */
    /** @attribute Guid("73EB4AF8-BE9C-4b49-B3A4-24F4FF657B26")
     */
   public interface IMyStorage
   {
        /** @attribute DispId(1)
         */
        Object GetItem(
        /** @attribute In()
            @attribute MarshalAs(UnmanagedType.BStr)
         */String bstrName);
      
      
        /** @attribute DispId(2)
         */
        void GetItems(
        /** @attribute In()
            @attribute MarshalAs(UnmanagedType.BStr)
         */String bstrLocation,
        /** @attribute Out()
            @attribute MarshalAs(UnmanagedType.SafeArray, 
            SafeArraySubType = VarEnum.VT_VARIANT)
         */Object Items[]);
             
        /** @attribute DispId(3)
         */
        void GetItemDescriptions(
            /** @attribute In()
             */String bstrLocation,
            /** @attribute In()
                @attribute Out()
                @attribute MarshalAs(UnmanagedType.SafeArray)
             */Object varDescriptions[]);
               
        /** @attribute DispId(4)
         */
        /** @return MarshalAs(UnmanagedType.VariantBool)
         */
        boolean get_IsEmpty();
    } //IMyStorage
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
System.Runtime.InteropServices 名前空間
MarshalAsAttribute クラス
ComImportAttribute クラス



英和和英テキスト翻訳

英語⇒日本語日本語⇒英語

辞書ショートカット

すべての辞書の索引

「UnmanagedType 列挙体」の関連用語

UnmanagedType 列挙体のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



UnmanagedType 列挙体のページの著作権

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2026 Microsoft.All rights reserved.

©2026 GRAS Group, Inc.RSS