UnmanagedType Enumeráció

Definíció

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
UnmanagedType
Attribútumok

Mezők

Name Érték Description
Bool 2

4 bájtos logikai érték (true != 0, false = 0). Ez a Win32 BOOL típus.

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

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

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 LPWStr , ha a sztring a nem felügyelt függvény használatával lett létrehozva CoTaskMemAlloc .

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 LPTStr exportálása nem támogatott.

ByValTStr 23

Egy struktúrán belül megjelenő sorba rendezett, rögzített hosszúságú karaktertömbökhöz használatos. ByValTStr A típusok úgy viselkednek, mint a C stílusú, rögzített méretű sztringek egy struktúrában (például char s[5]). A használt ByValTStr karaktertípust az CharSet azt tartalmazó szerkezetre alkalmazott attribútum argumentuma StructLayoutAttribute határozza meg. Mindig használja a SizeConst mezőt a tömb méretének jelzésére.

IUnknown 25

COM-mutató IUnknown . Ezt a tagot az Object adattípuson használhatja.

IDispatch 26

COM IDispatch mutató (Object Microsoft Visual Basic 6.0-s verzióban).

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 SafeArray, amely egy önleíró tömb, amely a társított tömbadatok típusát, rangját és határait hordozza. Ezzel a taggal a SafeArraySubType mezővel felülbírálhatja az alapértelmezett elemtípust.

ByValArray 30

Value A tulajdonság beállításakor ByValArraya mezőt úgy SizeConst kell beállítani, hogy a tömb elemeinek számát jelezze. A ArraySubType mező opcionálisan tartalmazhatja a UnmanagedType tömbelemeket, ha különbséget kell tenni a sztringtípusok között. Ezt UnmanagedType csak olyan tömbön használhatja, amelynek elemei mezőkként jelennek meg egy struktúrában.

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 char . Ritkán használja ezt a BSTR-szerű tagot.

VariantBool 37

2 bájtos, OLE-definiált VARIANT_BOOL típus (true = -1, false = 0).

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.

A következőre érvényes:

Lásd még