UnmanagedType Enum
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
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
- Kenmerken
Velden
| Name | Waarde | Description |
|---|---|---|
| Bool | 2 | Een booleaanse waarde van 4 bytes ( |
| 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 |
| 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 |
| 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 |
| 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 |
| ByValTStr | 23 | Wordt gebruikt voor tekenmatrices met een vaste lengte die in een structuur worden weergegeven.
|
| IUnknown | 25 | Een COM-aanwijzer |
| IDispatch | 26 | Een COM- |
| 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 |
| ByValArray | 30 | Wanneer de Value eigenschap is ingesteld |
| 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 |
| VariantBool | 37 | Een 2-byte, OLE-gedefinieerd VARIANT_BOOL type ( |
| 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.