UnmanagedType Enum

Definitie

Hiermee wordt aangegeven hoe u marshalparameters of velden kunt gebruiken voor onbeheerde code.

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
Overname
UnmanagedType
Kenmerken

Velden

Name Waarde Description
Bool 2

Een booleaanse waarde van 4 bytes (true != 0, false = 0). Dit is het Type Win32 BOOL.

I1 3

Een geheel getal van 1 byte dat is ondertekend. U kunt dit lid gebruiken om een Booleaanse waarde te transformeren in een 1-byte, C-style bool (true = 1, false = 0).

U1 4

Een geheel getal van 1 bytes dat niet is ondertekend.

I2 5

Een geheel getal met 2 bytetekens.

U2 6

Een geheel getal van 2 bytes dat niet is ondertekend.

I4 7

Een geheel getal met vier bytes dat is ondertekend.

U4 8

Een niet-ondertekend geheel getal van 4 bytes.

I8 9

Een geheel getal met 8 bytetekens.

U8 10

Een geheel getal van 8 bytes dat niet is ondertekend.

R4 11

Een getal van 4 bytes met drijvende komma.

R8 12

Een getal van 8 bytes met drijvende komma.

Currency 15

Een valutatype. Wordt gebruikt voor het Decimal marshalen van de decimale waarde als een COM-valutatype in plaats van als een Decimal.

BStr 19

Een Unicode-tekenreeks met een voorvoegsel met een dubbele byte met een lengte. U kunt dit lid, de standaardtekenreeks in COM, gebruiken voor het String gegevenstype.

LPStr 20

Eén byte, null-beëindigde ANSI-tekenreeks. U kunt dit lid gebruiken voor de String en StringBuilder gegevenstypen.

LPWStr 21

Een unicode-tekenreeks met 2 bytes die door null is beëindigd. U kunt de LPWStr waarde niet gebruiken met een niet-beheerde tekenreeks, tenzij de tekenreeks is gemaakt met behulp van de niet-beheerde CoTaskMemAlloc functie.

LPTStr 22

Een Unicode-tekenreeks. Deze waarde wordt alleen ondersteund voor het aanroepen van platforms en niet voor COM-interop, omdat het exporteren van een tekenreeks van het type LPTStr niet wordt ondersteund.

ByValTStr 23

Wordt gebruikt voor tekenmatrices met een vaste lengte die in een structuur worden weergegeven. ByValTStr typen gedragen zich als tekenreeksen met een vaste grootte in een structuur (bijvoorbeeld char s[5]). Het tekentype waarmee ByValTStr wordt gebruikt, wordt bepaald door het CharSet argument van het StructLayoutAttribute kenmerk dat is toegepast op de structuur die het bevat. Gebruik altijd het SizeConst veld om de grootte van de matrix aan te geven.

IUnknown 25

Een COM-aanwijzer IUnknown . U kunt dit lid gebruiken voor het Object gegevenstype.

IDispatch 26

Een COM-IDispatch aanwijzer (Object in Microsoft Visual Basic 6,0).

Struct 27

Een VARIANT, die wordt gebruikt voor door marshal beheerde klassen en waardetypen.

Interface 28

Een COM-interfacepointer. De Guid interface wordt verkregen uit de klassemetagegevens. Gebruik dit lid om het exacte interfacetype of het standaardinterfacetype op te geven als u dit toepast op een klasse. Dit lid produceert hetzelfde gedrag als IUnknown wanneer u dit toepast op het Object gegevenstype.

SafeArray 29

Een SafeArray, een zelfbeschrijfende matrix die het type, de rangschikking en de grenzen van de bijbehorende matrixgegevens bevat. U kunt dit lid met het SafeArraySubType veld gebruiken om het standaardelementtype te overschrijven.

ByValArray 30

Wanneer de Value eigenschap is ingesteld ByValArrayop, moet het SizeConst veld worden ingesteld om het aantal elementen in de matrix aan te geven. Het ArraySubType veld kan eventueel de UnmanagedType matrixelementen bevatten wanneer het nodig is om onderscheid te maken tussen tekenreekstypen. U kunt dit UnmanagedType alleen gebruiken voor een matrix waarvan de elementen worden weergegeven als velden in een structuur.

SysInt 31

Een platformafhankelijk, ondertekend geheel getal: 4 bytes op 32-bits Windows, 8 bytes op 64-bits Windows.

SysUInt 32

Een platformafhankelijk, niet-ondertekend geheel getal: 4 bytes op 32-bits Windows, 8 bytes op 64-bits Windows.

VBByRefStr 34

Een waarde waarmee Visual Basic een tekenreeks in niet-beheerde code kan wijzigen en de resultaten in beheerde code laat zien. Deze waarde wordt alleen ondersteund voor het aanroepen van het platform.

AnsiBStr 35

Een ANSI-tekenreeks die een door de lengte voorafgegaan door één byte is. U kunt dit lid gebruiken voor het String gegevenstype.

TBStr 36

Een lengtevoorvoegsel, Unicode-tekenreeks char . U gebruikt dit BSTR-achtige lid zelden.

VariantBool 37

Een 2-byte, OLE-gedefinieerd VARIANT_BOOL type (true = -1, false = 0).

FunctionPtr 38

Een geheel getal dat kan worden gebruikt als een functieaanwijzer in C-stijl. U kunt dit lid gebruiken voor een Delegate gegevenstype of voor een type dat wordt overgenomen van een Delegate.

AsAny 40

Een dynamisch type dat het type van een object tijdens runtime bepaalt en het object als dat type marshalt. Dit lid is alleen geldig voor aanroepen van platformmethoden.

LPArray 42

Een aanwijzer naar het eerste element van een C-stijlmatrix. Wanneer marshaling van beheerde naar niet-beheerde code wordt de lengte van de matrix bepaald door de lengte van de beheerde matrix. Wanneer marshaling van onbeheerde naar beheerde code, wordt de lengte van de matrix bepaald op basis van de SizeConst en SizeParamIndex velden, eventueel gevolgd door het niet-beheerde type van de elementen in de matrix wanneer het noodzakelijk is om onderscheid te maken tussen tekenreekstypen.

LPStruct 43

Een aanwijzer naar een C-stijlstructuur die u gebruikt voor door marshal beheerde klassen. Dit lid is alleen geldig voor aanroepen van platformmethoden.

CustomMarshaler 44

Hiermee geeft u de aangepaste marshaler-klasse op wanneer deze wordt gebruikt met het MarshalType of MarshalTypeRef veld. Het MarshalCookie veld kan worden gebruikt om aanvullende informatie door te geven aan de aangepaste marshaler. U kunt dit lid gebruiken voor elk verwijzingstype. Dit lid is alleen geldig voor parameters en retourwaarden. Deze kan niet worden gebruikt voor velden.

Error 45

Een systeemeigen type dat is gekoppeld aan een I4 of een U4 en die ervoor zorgt dat de parameter wordt geëxporteerd als HRESULT in de geëxporteerde typebibliotheek.

IInspectable 46

Een Windows Runtime interfacepointer. U kunt dit lid gebruiken voor het Object gegevenstype. Built-in-ondersteuning voor WinRT is verwijderd in .NET 5.

HString 47

Een Windows Runtime tekenreeks. U kunt dit lid gebruiken voor het String gegevenstype. Built-in-ondersteuning voor WinRT is verwijderd in .NET 5. Zie Voorheen ingebouwde ondersteunde typen voor tijdelijke oplossingen.

LPUTF8Str 48

Een aanwijzer naar een met UTF-8 gecodeerde tekenreeks.

Voorbeelden

Het volgende codefragment laat zien hoe u in beheerde broncode een niet-beheerde interface kunt declareren die is geïmplementeerd door een COM-onderdeel. Het System.Runtime.InteropServices.ComImportAttribute kenmerk voorkomt dat de IMyStorage interface wordt geëxporteerd voor gebruik door COM. (COM-clients moeten het bestaande COM-onderdeel rechtstreeks gebruiken.) In dit voorbeeld MarshalAsAttribute geeft u verschillende UnmanagedType leden op, die de typen vertegenwoordigen die worden gebruikt door de oorspronkelijke COM-interface.

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

Opmerkingen

Gebruik de UnmanagedType opsomming met het System.Runtime.InteropServices.MarshalAsAttribute kenmerk om op te geven hoe typen worden marshaled tijdens interoperation with unmanaged code. U kunt deze opsomming gebruiken om marshal code te gebruiken met behulp van eenvoudige waardetypen (I1, I2, I4, I8, R4, R8, U2, U4 en U8), niet-beheerde typen die niet beschikbaar zijn in het .NET Framework en verschillende diverse typen.

Zie Interoperating with Unmanaged Code voor meer informatie.

Van toepassing op

Zie ook