UnmanagedType Wyliczenie
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Określa sposób marshalowania parametrów lub pól na kod niezarządzany.
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
- Dziedziczenie
- Atrybuty
Pola
AnsiBStr | 35 | Ciąg znaków ANSI, który jest prefiksem pojedynczego bajtu. Możesz użyć tego elementu członkowskiego w typie String danych. |
AsAny | 40 | Typ dynamiczny określający typ obiektu w czasie wykonywania i marshaluje obiekt jako ten typ. Ten element członkowski jest prawidłowy tylko w przypadku metod wywoływania platformy. |
Bool | 2 | Wartość logiczna 4-bajtowa ( |
BStr | 19 | Ciąg znaków Unicode, który jest poprzedzony podwójnym bajtem. Możesz użyć tego elementu członkowskiego, który jest ciągiem domyślnym w modelu COM, w typie String danych. |
ByValArray | 30 |
Value Gdy właściwość jest ustawiona na |
ByValTStr | 23 | Używane w przypadku tablic znaków o stałej długości, które są wyświetlane w strukturze.
|
Currency | 15 | Typ waluty.
Decimal Służy do marshalingu wartości dziesiętnej jako typu waluty COM zamiast jako |
CustomMarshaler | 44 | Określa niestandardową klasę marshalera w przypadku użycia z polem MarshalType lub MarshalTypeRef . Pole MarshalCookie może służyć do przekazywania dodatkowych informacji do niestandardowego marshalera. Ten element członkowski można użyć w dowolnym typie referencyjnym. Ten element członkowski jest prawidłowy tylko dla parametrów i zwracanych wartości. Nie można jej używać w polach. |
Error | 45 | Typ natywny skojarzony z elementem I4 lub i U4 powoduje wyeksportowanie parametru jako HRESULT w wyeksportowanej bibliotece typów. |
FunctionPtr | 38 | Liczba całkowita, która może być używana jako wskaźnik funkcji w stylu C. Tego elementu członkowskiego można użyć w typie Delegate danych lub typie dziedziczynym z elementu Delegate. |
HString | 47 | Ciąg środowiska uruchomieniowego systemu Windows. Możesz użyć tego elementu członkowskiego w typie String danych. Wbudowana obsługa winRT została usunięta na platformie .NET 5. Aby obejść ten problem, zobacz Wcześniej wbudowane typy obsługiwane . |
I1 | 3 | Liczba całkowita z podpisem 1 bajtu. Za pomocą tego elementu członkowskiego można przekształcić wartość logiczną w 1 bajt, styl |
I2 | 5 | Liczba całkowita z podpisem 2 bajtów. |
I4 | 7 | Liczba całkowita z podpisem 4 bajtów. |
I8 | 9 | Liczba całkowita z podpisem 8 bajtów. |
IDispatch | 26 | Wskaźnik COM |
IInspectable | 46 | Wskaźnik interfejsu środowiska uruchomieniowego systemu Windows. Możesz użyć tego elementu członkowskiego w typie Object danych. Wbudowana obsługa winRT została usunięta na platformie .NET 5. |
Interface | 28 | Wskaźnik interfejsu COM. Interfejs Guid jest uzyskiwany z metadanych klasy. Użyj tego elementu członkowskiego, aby określić dokładny typ interfejsu lub domyślny typ interfejsu, jeśli zastosujesz go do klasy. Ten element członkowski generuje takie samo zachowanie, jak IUnknown w przypadku zastosowania go do Object typu danych. |
IUnknown | 25 | Wskaźnik COM |
LPArray | 42 | Wskaźnik do pierwszego elementu tablicy w stylu C. Podczas marshalingu z zarządzanego do niezarządzanego kodu długość tablicy jest określana przez długość tablicy zarządzanej. Podczas marshalingu z niezarządzanego do kodu zarządzanego długość tablicy jest określana z SizeConst pól i SizeParamIndex , opcjonalnie następuje niezarządzany typ elementów w tablicy, gdy konieczne jest rozróżnienie między typami ciągów. |
LPStr | 20 | Ciąg znaków ANSI zakończony pojedynczym bajtem o wartości null. Możesz użyć tego elementu członkowskiego w typach String danych i .StringBuilder |
LPStruct | 43 | Wskaźnik do struktury stylu C używanej do marshalowania zarządzanych klas sformatowanych. Ten element członkowski jest prawidłowy tylko w przypadku metod wywoływania platformy. |
LPTStr | 22 | Ciąg znaków Unicode. Ta wartość jest obsługiwana tylko w przypadku wywołania platformy, a nie międzyoperacyjnej modelu COM, ponieważ eksportowanie ciągu typu |
LPUTF8Str | 48 | Wskaźnik do zakodowanego ciągu UTF-8. |
LPWStr | 21 | Ciąg znaków Unicode zakończony 2 bajtami o wartości null. Nie można użyć |
R4 | 11 | Liczba zmiennoprzecinkowa o wartości 4 bajtów. |
R8 | 12 | Liczba zmiennoprzecinkowa o wartości 8 bajtów. |
SafeArray | 29 | Element |
Struct | 27 | WARIANT, który służy do marshalowania zarządzanych sformatowanych klas i typów wartości. |
SysInt | 31 | Zależna od platformy, podpisana liczba całkowita: 4 bajty w 32-bitowym systemie Windows, 8 bajtów w 64-bitowym systemie Windows. |
SysUInt | 32 | Zależna od platformy, niepodpisane liczba całkowita: 4 bajty w 32-bitowym systemie Windows, 8 bajtów w 64-bitowym systemie Windows. |
TBStr | 36 | Ciąg Unicode |
U1 | 4 | Liczba całkowita bez znaku 1 bajtów. |
U2 | 6 | Liczba całkowita bez znaku 2 bajtów. |
U4 | 8 | Liczba całkowita bez znaku 4 bajtów. |
U8 | 10 | Liczba całkowita bez znaku 8 bajtów. |
VariantBool | 37 | 2-bajtowy, zdefiniowany przez ole typ VARIANT_BOOL ( |
VBByRefStr | 34 | Wartość umożliwiająca programowi Visual Basic zmianę ciągu w kodzie niezarządzanym i odzwierciedlanie wyników w kodzie zarządzanym. Ta wartość jest obsługiwana tylko w przypadku wywołania platformy. |
Przykłady
Poniższy fragment kodu przedstawia sposób deklarowania niezarządzanego interfejsu zaimplementowanego przez składnik COM w zarządzanym kodzie źródłowym. Atrybut System.Runtime.InteropServices.ComImportAttribute uniemożliwia eksportowanie interfejsu IMyStorage
z powrotem do użytku przez com. (Klienci COM powinni bezpośrednio używać istniejącego składnika COM). W tym przykładzie MarshalAsAttribute określa kilka UnmanagedType elementów członkowskich, które reprezentują typy używane przez oryginalny interfejs 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
Uwagi
Użyj wyliczenia UnmanagedType z atrybutem System.Runtime.InteropServices.MarshalAsAttribute , aby określić sposób, w jaki typy są marshalowane podczas współdziałania z kodem niezarządzanym. Tego wyliczenia można użyć do marshalowania kodu przy użyciu prostych typów wartości (I1, I2, I4, I8, R4, R8, U2, U4 i U8), niezarządzanych typów, które są niedostępne w programie .NET Framework i różnych typach.
Aby uzyskać więcej informacji, zobacz Interoperating with Unmanaged Code (Współdziałanie z niezarządzanymi kodami).