UnmanagedType Enumeráció
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Azt határozza meg, hogyan lehet paramétereket vagy mezőket létrehozni a nem felügyelt kódhoz.
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
- Öröklődés
- Attribútumok
Mezők
| Name | Érték | Description |
|---|---|---|
| Bool | 2 | 4 bájtos logikai érték ( |
| I1 | 3 | Egy 1 bájtos aláírt egész szám. Ezzel a tagkal átalakíthat logikai értékeket 1 bájtos C-stílussá |
| U1 | 4 | Egy 1 bájtos, aláíratlan egész szám. |
| I2 | 5 | Két bájtos aláírt egész szám. |
| U2 | 6 | Egy 2 bájtos, aláíratlan egész szám. |
| I4 | 7 | Egy 4 bájtos aláírt egész szám. |
| U4 | 8 | 4 bájtos, aláíratlan egész szám. |
| I8 | 9 | Egy 8 bájtos aláírt egész szám. |
| U8 | 10 | Egy 8 bájtos, aláíratlan egész szám. |
| R4 | 11 | Egy 4 bájtos lebegőpontos szám. |
| R8 | 12 | Egy 8 bájtos lebegőpontos szám. |
| Currency | 15 | Pénznemtípus.
Decimal A decimális érték COM-pénznemtípusként való alkalmazásához használatos, nem pedig |
| BStr | 19 | Unicode karaktersztring, amely egy hosszelőtagú dupla bájt. Ezt a tagot, amely a COM alapértelmezett sztringje, használhatja az String adattípuson. |
| LPStr | 20 | Egyetlen bájtos, null értékű ANSI-karaktersztring. Ezt a tagot használhatja az String adattípusokon.StringBuilder |
| LPWStr | 21 | 2 bájtos, null értékű Unicode-karaktersztring. Az értéket nem felügyelt sztringgel csak akkor használhatja |
| LPTStr | 22 | Unicode karaktersztring. Ez az érték csak a platformhívások esetében támogatott, a COM-interop esetében nem, mert egy típus sztringjének |
| ByValTStr | 23 | Egy struktúrán belül megjelenő sorba rendezett, rögzített hosszúságú karaktertömbökhöz használatos.
|
| IUnknown | 25 | COM-mutató |
| IDispatch | 26 | COM |
| Struct | 27 | EGY VARIANT, amely felügyelt formázott osztályok és értéktípusok marshalására szolgál. |
| Interface | 28 | COM-felület mutatója. A Guid felület lekérte az osztály metaadatait. Ebben a tagban megadhatja a pontos illesztőtípust vagy az alapértelmezett illesztőtípust, ha egy osztályra alkalmazza. Ez a tag ugyanazt a viselkedést eredményezi, mint IUnknown amikor az Object adattípusra alkalmazza. |
| SafeArray | 29 | A |
| ByValArray | 30 |
Value A tulajdonság beállításakor |
| SysInt | 31 | Platformfüggetlen, aláírt egész szám: 4 bájt 32 bites Windows, 8 bájt 64 bites Windows. |
| SysUInt | 32 | Platformfüggetlen, aláíratlan egész szám: 4 bájt 32 bites Windows, 8 bájt 64 bites Windows. |
| VBByRefStr | 34 | Olyan érték, amely lehetővé teszi, hogy a Visual Basic módosítson egy sztringet nem felügyelt kódban, és hogy az eredmények megjelenjenek a felügyelt kódban. Ez az érték csak platformhívás esetén támogatott. |
| AnsiBStr | 35 | ANSI-karaktersztring, amely egy bájt hosszúságú előtaggal rendelkezik. Ezt a tagot az String adattípuson használhatja. |
| TBStr | 36 | Egy hosszelőtagú Unicode-sztring |
| VariantBool | 37 | 2 bájtos, OLE-definiált VARIANT_BOOL típus ( |
| FunctionPtr | 38 | C stílusú függvénymutatóként használható egész szám. Ezt a tagot Delegate adattípuson vagy egy adott típustól Delegateöröklő típuson használhatja. |
| AsAny | 40 | Dinamikus típus, amely meghatározza egy objektum típusát futásidőben, és az objektumot ilyen típusként adhatja meg. Ez a tag csak platformhívási metódusokra érvényes. |
| LPArray | 42 | Egy C stílusú tömb első elemére mutató mutató. Ha felügyelt kódról nem felügyelt kódra van állítva, a tömb hosszát a felügyelt tömb hossza határozza meg. Ha nem felügyelt kódból felügyelt kódba kerül, a tömb hosszát a rendszer a SizeConstSizeParamIndex mezőkből határozza meg, és opcionálisan a tömb elemeinek nem felügyelt típusát követi, ha különbséget kell tenni a sztringtípusok között. |
| LPStruct | 43 | Mutató egy C-stílusú struktúrára, amelyet felügyelt formázott osztályok felügyeletére használ. Ez a tag csak platformhívási metódusokra érvényes. |
| CustomMarshaler | 44 | Az egyéni marshaler osztályt adja meg, ha a mezővel vagy MarshalType a MarshalTypeRef mezővel használja. A MarshalCookie mezővel további információkat adhat át az egyéni marsallnak. Ezt a tagot bármilyen referenciatípushoz használhatja. Ez a tag csak paraméterekre érvényes, és csak értékeket ad vissza. Mezőkön nem használható. |
| Error | 45 | Natív típus, amely egy I4 vagy egy U4 fájlhoz van társítva, és amely miatt a paraméter HRESULT-ként lesz exportálva az exportált típustárban. |
| IInspectable | 46 | Egy Windows-futtatókörnyezet felületmutató. Ezt a tagot az Object adattípuson használhatja. A WinRT beépített támogatása az 5 .NET lett eltávolítva. |
| HString | 47 | Egy Windows-futtatókörnyezet sztring. Ezt a tagot az String adattípuson használhatja. A WinRT beépített támogatása az 5 .NET lett eltávolítva. Kerülő megoldásért lásd a korábban beépített támogatott típusokat . |
| LPUTF8Str | 48 | Mutató egy UTF-8 kódolású sztringre. |
Példák
Az alábbi kódrészlet bemutatja, hogyan deklarálható egy COM-összetevő által implementált nem felügyelt felület felügyelt forráskódban. Az System.Runtime.InteropServices.ComImportAttribute attribútum megakadályozza, hogy a IMyStorage felület a COM általi használatra vissza legyen exportálva. (A COM-ügyfeleknek közvetlenül a meglévő COM-összetevőt kell használniuk.) Ebben a példában MarshalAsAttribute több UnmanagedType tagot határoz meg, amelyek az eredeti COM-felület által használt típusokat jelölik.
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
Megjegyzések
UnmanagedType Az enumerálás és az System.Runtime.InteropServices.MarshalAsAttribute attribútum használatával megadhatja, hogy a típusok hogyan legyenek megadva a nem felügyelt kóddal való együttműködés során. Ez a számbavétel egyszerű értéktípusokkal (I1, I2, I4, I8, R4, R8, U2, U4 és U8), a .NET-keretrendszerben nem elérhető nem felügyelt típusok és különböző egyéb típusok használatával használható.
További információ: Együttműködés felügyeletlen kóddal.