UnmanagedType Výčet

Definice

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
UnmanagedType
Atributy

Pole

Name Hodnota Description
Bool 2

4 bajtová logická hodnota (true != 0, false = 0). Toto je typ BoOL win32.

I1 3

1 bajtové celé číslo se signedm. Tento člen můžete použít k transformaci logické hodnoty na 1 bajt, styl bool C (true = 1, false = 0).

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

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

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

ByValTStr 23

Používá se pro vložená pole znaků s pevnou délkou, která se zobrazují v rámci struktury. 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 obsahující strukturu. Vždy použijte SizeConst pole k označení velikosti pole.

IUnknown 25

Ukazatel com IUnknown . Tento člen můžete použít u datového Object typu.

IDispatch 26

Ukazatel com IDispatch (Object v Microsoft Visual Basic 6.0).

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

ByValArray 30

Pokud je vlastnost nastavena Value na ByValArray, SizeConst musí být pole nastaveno tak, aby označí počet prvků v poli. Pole ArraySubType může volitelně obsahovat UnmanagedType prvky pole, pokud je nutné rozlišovat mezi typy řetězců. Můžete to UnmanagedType použít pouze u pole, jehož prvky se zobrazují jako pole ve struktuře.

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 char s předponou délky. Tento člen typu BSTR používáte zřídka.

VariantBool 37

Typ VARIANT_BOOL definovaný 2 bajty OLE (true = -1, false = 0).

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.

Platí pro

Viz také