UnmanagedType Výčet

Definice

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
UnmanagedType
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 (true != 0, false = 0). Toto je typ Win32 BOOL.

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 ByValArrayhodnotu , SizeConst musí být pole nastaveno tak, aby bylo možné určit počet prvků v poli. Pole ArraySubType může volitelně obsahovat UnmanagedType elementy pole, pokud je nutné rozlišovat mezi typy řetězců. Tuto možnost lze použít UnmanagedType pouze u pole, jehož prvky se zobrazují jako pole ve struktuře.

ByValTStr 23

Používá se pro řádková pole znaků s pevnou délkou, která se zobrazují ve struktuře. ByValTStr Typy se chovají jako řetězce ve stylu jazyka C s pevnou velikostí uvnitř struktury (například char s[5]). Typ znaku použitý s ByValTStr je určen argumentem CharSet atributu StructLayoutAttribute použitého na strukturu obsahující. K označení velikosti pole vždy používejte SizeConst pole .

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 Decimal.

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 bool C (true = 1, false = 0).

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 IDispatch pointer (Object in Microsoft Visual Basic 6.0).

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 IUnknown . Tento člen můžete použít pro Object datový typ.

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 typy řetězců.

LPStr 20

Jeden bajtový řetězec znaku ANSI ukončený hodnotou null. Tento člen můžete použít pro String datové typy 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 ne pro zprostředkovatele komunikace COM, protože export řetězce typu LPTStr se nepodporuje.

LPUTF8Str 48

Ukazatel na řetězec kódovaný UTF-8.

LPWStr 21

Řetězec znaku Unicode s 2 bajty ukončený hodnotou null. Nelze použít LPWStr hodnotu s nespravovaným řetězcem, pokud nebyl řetězec vytvořen pomocí nespravované CoTaskMemAlloc funkce.

R4 11

Číslo s plovoucí desetinou čárkou o 4 bajtech.

R8 12

8-bajtové číslo s plovoucí desetinou čárkou.

SafeArray 29

A SafeArray, což je samopopisující pole, které nese typ, pořadí a hranice přidružených dat pole. Tento člen můžete použít s polem SafeArraySubType k přepsání výchozího typu elementu.

Struct 27

Varianta, která se používá k zařazování spravovaných formátovaných tříd a hodnotových typů.

SysInt 31

Celé číslo závislé na platformě: 4 bajty ve 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 ve 32bitovém Systému Windows, 8 bajtů v 64bitovém Systému Windows.

TBStr 36

Řetězec Unicode char s délkou předpony. Tento člen podobný BSTR používáte jen zřídka.

U1 4

1 bajt bez znaménka celé číslo.

U2 6

2 bajtové celé číslo bez znaménka.

U4 8

4 bajtové celé číslo bez znaménka.

U8 10

8 bajtů bez znaménka celé číslo.

VariantBool 37

Typ 2 bajtu definovaný ole VARIANT_BOOL (true = -1, false = 0).

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 volá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 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 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.

Platí pro

Viz také