UnmanagedType Výčet
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Identifikuje způsob zařazování parametrů nebo polí do nespravovaného kódu.
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
- Dědičnost
- Atributy
Pole
| Name | Hodnota | Description |
|---|---|---|
| Bool | 2 | 4 bajtová logická hodnota ( |
| I1 | 3 | 1 bajtové celé číslo se signedm. Tento člen můžete použít k transformaci logické hodnoty na 1 bajt, styl |
| U1 | 4 | Celé číslo bez znaménka 1 bajtů. |
| I2 | 5 | Celé číslo se 2 bajty. |
| U2 | 6 | 2 bajtové celé číslo bez znaménka. |
| I4 | 7 | Celé číslo se 4 bajty. |
| U4 | 8 | 4bajtů bez znaménka. |
| I8 | 9 | Celé číslo se 8 bajty. |
| U8 | 10 | Celé číslo bez znaménka 8 bajtů. |
| R4 | 11 | Číslo se 4 bajty s plovoucí desetinou čárkou. |
| R8 | 12 | Číslo s plovoucí desetinou čárkou 8 bajtů. |
| Currency | 15 | Typ měny. Používá se k Decimal zařazování desetinné hodnoty jako typu měny COM místo jako |
| BStr | 19 | Řetězec znaku Unicode, který má předponu délky s dvojitým bajtem. Tento člen, což je výchozí řetězec v modelu COM, můžete použít u datového String typu. |
| LPStr | 20 | Řetězec znaku ANSI s jedním bajtem, ukončený hodnotou null. Tento člen můžete použít u datových String typů a StringBuilder datových typů. |
| LPWStr | 21 | Řetězec znaku Unicode s 2 bajty ukončený hodnotou null. Hodnotu nelze použít |
| LPTStr | 22 | Řetězec znaků Unicode. Tato hodnota je podporována pouze pro volání platformy a ne pro zprostředkovatele komunikace s objekty COM, protože export řetězce typu |
| ByValTStr | 23 | Používá se pro vložená pole znaků s pevnou délkou, která se zobrazují v rámci struktury.
|
| IUnknown | 25 | Ukazatel com |
| IDispatch | 26 | Ukazatel com |
| Struct | 27 | VARIANT, která se používá k zařazování spravovaných formátovaných tříd a hodnotových typů. |
| Interface | 28 | Ukazatel rozhraní MODELU COM. Rozhraní Guid je získáno z metadat třídy. Tento člen použijte k určení přesného typu rozhraní nebo výchozího typu rozhraní, pokud ho použijete u třídy. Tento člen vytvoří stejné chování jako IUnknown při použití u datového Object typu. |
| SafeArray | 29 | A |
| ByValArray | 30 | Pokud je vlastnost nastavena Value na |
| SysInt | 31 | Celé číslo závislé na platformě: 4 bajty na 32bitovém Windows, 8 bajtů na 64bitovém Windows. |
| SysUInt | 32 | Celé číslo závislé na platformě: 4 bajty na 32bitovém Windows, 8 bajtů na 64bitovém Windows. |
| VBByRefStr | 34 | Hodnota, která umožňuje jazyku Visual Basic změnit řetězec v nespravovaném kódu a výsledky se projeví ve spravovaném kódu. Tato hodnota je podporována pouze pro vyvolání platformy. |
| AnsiBStr | 35 | Řetězec znaku ANSI, který je předponou délky s jedním bajtem. Tento člen můžete použít u datového String typu. |
| TBStr | 36 | Řetězec Unicode |
| VariantBool | 37 | Typ VARIANT_BOOL definovaný 2 bajty OLE ( |
| FunctionPtr | 38 | Celé číslo, které lze použít jako ukazatel funkce ve stylu jazyka C. Tento člen můžete použít pro Delegate datový typ nebo typ, který dědí z objektu Delegate. |
| AsAny | 40 | Dynamický typ, který určuje typ objektu za běhu a zařadí objekt jako tento typ. Tento člen je platný pouze pro metody volání platformy. |
| LPArray | 42 | Ukazatel na první prvek pole ve stylu jazyka C. Při zařazování ze spravovaného do nespravovaného kódu je délka pole určena délkou spravovaného pole. Při zařazování z nespravovaného kódu do spravovaného kódu je délka pole určena z SizeConst polí a SizeParamIndex pole, volitelně následuje nespravovaný typ prvků v rámci pole, pokud je nutné rozlišovat mezi typy řetězců. |
| LPStruct | 43 | Ukazatel na strukturu stylu jazyka C, kterou používáte k zařazování spravovaných formátovaných tříd. Tento člen je platný pouze pro metody volání platformy. |
| CustomMarshaler | 44 | Určuje vlastní třídu marshaler při použití s polem MarshalType nebo MarshalTypeRef pole. Pole MarshalCookie lze použít k předání dalších informací vlastnímu zařazovači. Tento člen můžete použít u libovolného typu odkazu. Tento člen je platný pouze pro parametry a návratové hodnoty. Nelze jej použít u polí. |
| Error | 45 | Nativní typ přidružený k I4 nebo k a U4 který způsobí export parametru jako HRESULT v exportované knihovně typů. |
| IInspectable | 46 | Ukazatel rozhraní prostředí Windows Runtime. Tento člen můžete použít u datového Object typu. Built-in podpora pro WinRT byla odebrána v .NET 5. |
| HString | 47 | Řetězec prostředí Windows Runtime. Tento člen můžete použít u datového String typu. Built-in podpora pro WinRT byla odebrána v .NET 5. Alternativní řešení najdete v části Dříve předdefinované podporované typy . |
| LPUTF8Str | 48 | Ukazatel na řetězec kódovaný UTF-8. |
Příklady
Následující fragment kódu ukazuje, jak deklarovat ve spravovaném zdrojovém kódu nespravované rozhraní implementované komponentou COM. Atribut System.Runtime.InteropServices.ComImportAttribute zabraňuje exportu IMyStorage rozhraní zpět pro použití modelu COM. (Klienti modelu COM by měli použít existující komponentu COM přímo.) V tomto příkladu MarshalAsAttribute určuje několik UnmanagedType členů, které představují typy používané původním rozhraním modelu COM.
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
Poznámky
Pomocí výčtu UnmanagedType s atributem System.Runtime.InteropServices.MarshalAsAttribute určete, jak se typy zařazují během spolupráce s nespravovaným kódem. Tento výčet můžete použít k zařazování kódu pomocí jednoduchých hodnotových typů (I1, I2, I4, I8, R4, R8, U2, U4 a U8), nespravovaných typů, které nejsou v .NET Frameworku dostupné a různé typy.
Další informace najdete v tématu Spolupráce s nespravovaným kódem.