UnmanagedType 列挙型
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
パラメーターまたはフィールドをアンマネージ コードにマーシャリングする方法を示します。
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
- 継承
- 属性
フィールド
AnsiBStr | 35 | 長さを示すプレフィックスを付けた 1 バイトの ANSI 文字列。 このメンバーは String データ型で使用できます。 |
AsAny | 40 | 実行時にオブジェクトの型を確認し、その型としてオブジェクトをマーシャリングする動的な型。 このメンバーは、プラットフォーム呼び出しメソッドにのみ有効です。 |
Bool | 2 | 4 バイトの Boolean 値 ( |
BStr | 19 | 長さを示すプリフィックスを付けた 2 バイトの Unicode 文字列。 このメンバー (COM の既定の文字列) は、String データ型で使用できます。 |
ByValArray | 30 |
Value プロパティを |
ByValTStr | 23 | 構造体に定義されているインライン固定長文字配列で使用します。
|
Currency | 15 | 通貨型。 10 進値を |
CustomMarshaler | 44 | MarshalType または MarshalTypeRef フィールドと共に使用する場合に、カスタム マーシャラー クラスを指定します。 MarshalCookie フィールドは、カスタム マーシャラーに追加の情報を渡すために使用できます。 このメンバーは任意の参照型で使用できます。 このメンバーは、パラメーターと戻り値にのみ有効です。 フィールドでは使用できません。 |
Error | 45 | I4 または U4 に関連付けられたネイティブな型。この型により、パラメーターはエクスポート先のタイプ ライブラリに HRESULT としてエクスポートされます。 |
FunctionPtr | 38 | C スタイルの関数ポインターとして使用できる整数値。 このメンバーは、Delegate データ型または Delegate から継承した型で使用できます。 |
HString | 47 | Windows ランタイム文字列。 このメンバーは String データ型で使用できます。 WinRT の組み込みサポートが .NET 5 で削除されました。 回避策については、 以前にサポートされている組み込みの型 に関するページを参照してください。 |
I1 | 3 | 1 バイト符号付き整数。 このメンバーを使用すると、Boolean 値を 1 バイトの C スタイル |
I2 | 5 | 2 バイト符号付き整数。 |
I4 | 7 | 4 バイト符号付き整数。 |
I8 | 9 | 8 バイト符号付き整数。 |
IDispatch | 26 | COM の |
IInspectable | 46 | Windows ランタイム インターフェイス ポインター。 このメンバーは Object データ型で使用できます。 WinRT の組み込みサポートが .NET 5 で削除されました。 |
Interface | 28 | COM インターフェイス ポインター。 インターフェイスの Guid は、クラス メタデータから取得します。 インターフェイス型を直接指定する場合、またはクラスに適用する場合は既定のインターフェイス型を指定する場合に、このメンバーを使用します。 このメンバーは、Object データ型に適用すると、IUnknown と同じ動作を生成します。 |
IUnknown | 25 | COM |
LPArray | 42 | C スタイル配列の最初の要素へのポインター。 マネージド コードからアンマネージド コードにマーシャリングする場合、配列長はマネージド配列長によって決定されます。 アンマネージド コードからマネージド コードにマーシャリングする場合、配列の長さは SizeConst フィールドと SizeParamIndex フィールドによって決まります。文字列の型を区別する必要がある場合は、配列内の要素のアンマネージド型も考慮されます。 |
LPStr | 20 | 終端が null の 1 バイトの ANSI 文字列。 このメンバーは、String データ型および StringBuilder データ型で使用できます。 |
LPStruct | 43 | マネージド書式指定クラスをマーシャリングするときに使用する C スタイル構造体へのポインター。 このメンバーは、プラットフォーム呼び出しメソッドにのみ有効です。 |
LPTStr | 22 | Unicode 文字列。 型 |
LPUTF8Str | 48 | UTF-8 でエンコードされた文字列へのポインター。 |
LPWStr | 21 | 終端が null の 2 バイトの Unicode 文字列。 文字列がアンマネージド |
R4 | 11 | 4 バイトの浮動小数点数。 |
R8 | 12 | 8 バイトの浮動小数点数。 |
SafeArray | 29 |
|
Struct | 27 | マネージド書式指定クラスと値型をマーシャリングするために使用する VARIANT。 |
SysInt | 31 | プラットフォーム依存、符号付き整数: 32 ビット Windows では 4 バイト、64 ビット Windows では 8 バイト。 |
SysUInt | 32 | プラットフォーム依存、符号なし整数: 32 ビット Windows では 4 バイト、64 ビット Windows では 8 バイト。 |
TBStr | 36 | 長さのプレフィックスが付いた Unicode |
U1 | 4 | 1 バイト符号なし整数。 |
U2 | 6 | 2 バイト符号なし整数。 |
U4 | 8 | 4 バイト符号なし整数。 |
U8 | 10 | 8 バイト符号なし整数。 |
VariantBool | 37 | 2 バイトの OLE 定義 VARIANT_BOOL 型 ( |
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 で使用できないアンマネージ型、およびその他のさまざまな型を使用してコードをマーシャリングできます。
詳細については、「アンマネージ コードとの相互運用」を参照してください。
適用対象
こちらもご覧ください
.NET