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í.
Určuje, jak zařašovat parametry nebo pole 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
AnsiBStr | 35 | Řetězec znaků ANSI, který má délku s předponou s jedním bajtem. Tento člen můžete použít pro String datový typ. |
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. |
Bool | 2 | 4 bajtová logická hodnota ( |
BStr | 19 | Řetězec znaků Unicode, který je délka-předpona dvoubabajtů. Pro datový typ můžete použít tento člen, což je výchozí řetězec v modelu COM String . |
ByValArray | 30 |
Value Pokud je vlastnost nastavena na |
ByValTStr | 23 | Používá se pro řádková pole znaků s pevnou délkou, která se zobrazují ve struktuře.
|
Currency | 15 | Typ měny. Používá se u objektu Decimal k zařazování desetinné hodnoty jako typu měny MODELU COM místo jako |
CustomMarshaler | 44 | Určuje vlastní třídu zařazování při použití s polem MarshalType nebo MarshalTypeRef . 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 ji použít u polí. |
Error | 45 | Nativní typ, který je přidružen k I4U4 nebo a který způsobí, že parametr bude exportován jako HRESULT v exportované knihovně typů. |
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 pro typ, který dědí z objektu Delegate. |
HString | 47 | Řetězec prostředí Windows Runtime. Tento člen můžete použít pro String datový typ. V .NET 5 byla odebrána integrovaná podpora pro WinRT. Alternativní řešení najdete v tématu Dříve předdefinované podporované typy . |
I1 | 3 | Jedná se o 1 bajtové celé číslo se signedýmm sadou. Tento člen můžete použít k transformaci logické hodnoty na 1 bajt, styl |
I2 | 5 | 2 bajtové podepsané celé číslo. |
I4 | 7 | 4 bajtové celé číslo se 4 bajty. |
I8 | 9 | 8-bajtové podepsané celé číslo. |
IDispatch | 26 | A COM |
IInspectable | 46 | Ukazatel rozhraní Prostředí Windows Runtime. Tento člen můžete použít pro Object datový typ. V .NET 5 byla odebrána integrovaná podpora pro WinRT. |
Interface | 28 | Ukazatel rozhraní COM. Z Guid rozhraní je získán z metadat třídy. Tento člen slouží k určení přesného typu rozhraní nebo výchozího typu rozhraní, pokud jej použijete na třídu. Tento člen vytváří stejné chování, jako IUnknown když ho použijete na Object datový typ. |
IUnknown | 25 | Ukazatel modelu COM |
LPArray | 42 | Ukazatel na první prvek pole ve stylu jazyka C. Při zařazování ze spravovaného na nespravovaný kód je délka pole určena délkou spravovaného pole. Při zařazování z nespravovaného na spravovaný kód je délka pole určena z SizeConst polí a SizeParamIndex , volitelně následuje nespravovaný typ prvků v rámci pole, pokud je nutné rozlišovat mezi řetězcovými typy. |
LPStr | 20 | Jeden bajtový řetězec znaků ANSI ukončený hodnotou null. Tento člen můžete použít u datových String typů a StringBuilder . |
LPStruct | 43 | Ukazatel na strukturu ve stylu jazyka C, který slouží k zařazování spravovaných formátovaných tříd. Tento člen je platný pouze pro metody volání platformy. |
LPTStr | 22 | Řetězec znaků Unicode. Tato hodnota je podporována pouze pro volání platformy, a nikoli pro zprostředkovatele komunikace COM, protože export řetězce typu |
LPUTF8Str | 48 | Ukazatel na řetězec kódovaný UTF-8. |
LPWStr | 21 | 2 bajtový řetězec znaku Unicode ukončený hodnotou null. Hodnotu nemůžete použít |
R4 | 11 | Číslo s plovoucí desetinou čárkou o 4 bajtách. |
R8 | 12 | 8 bajtové číslo s plovoucí desetinou čárkou. |
SafeArray | 29 | A |
Struct | 27 | A VARIANT, která se používá k zařazování spravovaných formátovaných tříd a typů hodnot. |
SysInt | 31 | Celé číslo se signedýmm kódem závislé na platformě: 4 bajty v 32bitovém Systému Windows, 8 bajtů v 64bitovém systému Windows. |
SysUInt | 32 | Celé číslo bez znaménka závislé na platformě: 4 bajty v 32bitovém systému Windows, 8 bajtů v 64bitovém Systému Windows. |
TBStr | 36 | Řetězec Unicode |
U1 | 4 | 1 bajtové celé číslo bez znaménka. |
U2 | 6 | 2 bajtové celé číslo bez znaménka. |
U4 | 8 | 4 bajtové celé číslo bez znaménka. |
U8 | 10 | 8 bajtové celé číslo bez znaménka. |
VariantBool | 37 | Typ 2 bajtů definovaný ole VARIANT_BOOL ( |
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 se podporuje pouze pro vyvolání platformy. |
Příklady
Následující fragment kódu ukazuje, jak deklarovat, ve spravovaném zdrojovém kódu, nespravované rozhraní implementované komponentou modelu COM. Atribut System.Runtime.InteropServices.ComImportAttribute zabraňuje v exportu IMyStorage
rozhraní zpět pro použití modelu COM. (Klienti modelu COM by měli používat 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 mají být typy zařazovány 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 typů hodnot (I1, I2, I4, I8, R4, R8, U2, U4 a U8), nespravovaných typů, které nejsou v rozhraní .NET Framework k dispozici, a různých různých typů.
Další informace najdete v tématu Spolupráce s nespravovaným kódem.