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 ř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 LPTStr není podporován.

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 LPWStr s nespravovaným řetězcem, pokud nebyl vytvořen pomocí nespravované CoTaskMemAlloc funkce.

R4 11

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

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

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 char s délkou předpony. Tento člen podobný BSTR používáte zřídka.

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

Platí pro

Viz také