UnmanagedType Wyliczenie

Definicja

Określa sposób organizowania parametrów lub pól z niezarządzanym kodem.Identifies how to marshal parameters or fields to unmanaged 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
Dziedziczenie
UnmanagedType
Atrybuty

Pola

AnsiBStr 35

Ciąg znaków ANSI, który jest z prefiksem jednobajtowym o stałej długości.An ANSI character string that is a length-prefixed single byte. Tego elementu członkowskiego można użyć dla String typu danych.You can use this member on the String data type.

AsAny 40

Typ dynamiczny, który określa typ obiektu w czasie wykonywania i kierujący obiekt jako ten typ.A dynamic type that determines the type of an object at run time and marshals the object as that type. Ten element członkowski jest prawidłowy tylko dla metod wywołania platformy.This member is valid for platform invoke methods only.

Bool 2

Wartość 4-bajtowa wartości logicznej ( true ! = 0, false = 0).A 4-byte Boolean value (true != 0, false = 0). Jest to typ BOOL Win32.This is the Win32 BOOL type.

BStr 19

Ciąg znaków Unicode, który jest z prefiksem o stałej długości.A Unicode character string that is a length-prefixed double byte. Możesz użyć tego elementu członkowskiego, który jest domyślnym ciągiem w modelu COM, dla String typu danych.You can use this member, which is the default string in COM, on the String data type.

ByValArray 30

Gdy Value Właściwość jest ustawiona na ByValArray , SizeConst pole musi być ustawione tak, aby wskazywało liczbę elementów w tablicy.When the Value property is set to ByValArray, the SizeConst field must be set to indicate the number of elements in the array. ArraySubTypePole może opcjonalnie zawierać UnmanagedType elementy tablicy, gdy jest to konieczne do rozróżnienia między typami ciągów.The ArraySubType field can optionally contain the UnmanagedType of the array elements when it is necessary to differentiate among string types. Można jej użyć UnmanagedType tylko na tablicy, której elementy są wyświetlane jako pola w strukturze.You can use this UnmanagedType only on an array that whose elements appear as fields in a structure.

ByValTStr 23

Używane dla tablic znaków o stałej długości, które pojawiają się w obrębie struktury.Used for in-line, fixed-length character arrays that appear within a structure. ByValTStr typy zachowują się jak style języka C, o stałym rozmiarze w strukturze (na przykład char s [5]).ByValTStr types behave like C-style, fixed-size strings inside a structure (for example, char s[5]). Typ znaku używany z ByValTStr jest określany przez CharSet argument StructLayoutAttribute atrybutu zastosowanego do zawartej struktury.The character type used with ByValTStr is determined by the CharSet argument of the StructLayoutAttribute attribute applied to the containing structure. Zawsze używaj SizeConst pola, aby określić rozmiar tablicy.Always use the SizeConst field to indicate the size of the array.

Currency 15

Typ waluty.A currency type. Używane w Decimal celu zorganizowania wartości dziesiętnej jako typu waluty com, a nie jako Decimal .Used on a Decimal to marshal the decimal value as a COM currency type instead of as a Decimal.

CustomMarshaler 44

Określa klasę niestandardowego organizatora, gdy jest używana z MarshalType MarshalTypeRef polem or.Specifies the custom marshaler class when used with the MarshalType or MarshalTypeRef field. MarshalCookiePole może służyć do przekazania dodatkowych informacji do organizatora niestandardowego.The MarshalCookie field can be used to pass additional information to the custom marshaler. Tego elementu członkowskiego można użyć na dowolnym typie referencyjnym.You can use this member on any reference type. Ten element członkowski jest prawidłowy tylko dla parametrów i zwracanych wartości.This member is valid for parameters and return values only. Nie można jej używać w polach.It cannot be used on fields.

Error 45

Typ natywny, który jest skojarzony z I4 lub U4 i który powoduje, że parametr ma zostać WYEKSPORTOWANY jako HRESULT w wyeksportowanej bibliotece typów.A native type that is associated with an I4 or an U4 and that causes the parameter to be exported as an HRESULT in the exported type library.

FunctionPtr 38

Liczba całkowita, która może być używana jako wskaźnik funkcji w stylu języka C.An integer that can be used as a C-style function pointer. Tego elementu członkowskiego można użyć w przypadku Delegate typu danych lub typu, który dziedziczy z Delegate .You can use this member on a Delegate data type or on a type that inherits from a Delegate.

HString 47

Środowisko wykonawcze systemu WindowsWindows RuntimeCiąg.A Środowisko wykonawcze systemu WindowsWindows Runtime string. Tego elementu członkowskiego można użyć dla String typu danych.You can use this member on the String data type.

I1 3

1-bajtowa liczba całkowita ze znakiem.A 1-byte signed integer. Tego elementu członkowskiego można użyć do przekształcenia wartości logicznej na 1-bajtowy, w stylu C bool ( true = 1, false = 0).You can use this member to transform a Boolean value into a 1-byte, C-style bool (true = 1, false = 0).

I2 5

2-bajtowa liczba całkowita ze znakiem.A 2-byte signed integer.

I4 7

4-bajtowa liczba całkowita ze znakiem.A 4-byte signed integer.

I8 9

8-bajtowa liczba całkowita ze znakiem.An 8-byte signed integer.

IDispatch 26

Wskaźnik COM IDispatch ( Object w programie Microsoft Visual Basic 6,0).A COM IDispatch pointer (Object in Microsoft Visual Basic 6.0).

IInspectable 46

Środowisko wykonawcze systemu WindowsWindows RuntimeWskaźnik interfejsu.A Środowisko wykonawcze systemu WindowsWindows Runtime interface pointer. Tego elementu członkowskiego można użyć dla Object typu danych.You can use this member on the Object data type.

Interface 28

Wskaźnik interfejsu COM.A COM interface pointer. GuidInterfejs jest uzyskiwany z metadanych klasy.The Guid of the interface is obtained from the class metadata. Użyj tego elementu członkowskiego, aby określić dokładny typ interfejsu lub domyślny typ interfejsu w przypadku zastosowania go do klasy.Use this member to specify the exact interface type or the default interface type if you apply it to a class. Ten element członkowski daje takie samo zachowanie, jak w IUnknown przypadku zastosowania go do Object typu danych.This member produces the same behavior as IUnknown when you apply it to the Object data type.

IUnknown 25

Wskaźnik COM IUnknown .A COM IUnknown pointer. Tego elementu członkowskiego można użyć dla Object typu danych.You can use this member on the Object data type.

LPArray 42

Wskaźnik do pierwszego elementu tablicy stylów języka C.A pointer to the first element of a C-style array. W przypadku kierowania z zarządzanego do niezarządzanego kodu, Długość tablicy jest określana na podstawie długości tablicy zarządzanej.When marshaling from managed to unmanaged code, the length of the array is determined by the length of the managed array. W przypadku kierowania z niezarządzanego do kodu zarządzanego, Długość tablicy jest określana na podstawie SizeConst SizeParamIndex pól i, opcjonalnie, po których następuje niezarządzany typ elementów w tablicy, gdy jest to konieczne do rozróżnienia między typami ciągów.When marshaling from unmanaged to managed code, the length of the array is determined from the SizeConst and SizeParamIndex fields, optionally followed by the unmanaged type of the elements within the array when it is necessary to differentiate among string types.

LPStr 20

Pojedynczy bajt, ciąg znaków ANSI zakończony wartością null.A single byte, null-terminated ANSI character string. Tego elementu członkowskiego można użyć dla String StringBuilder typów danych i.You can use this member on the String and StringBuilder data types.

LPStruct 43

Wskaźnik do struktury języka C, który służy do organizowania zarządzanych klas.A pointer to a C-style structure that you use to marshal managed formatted classes. Ten element członkowski jest prawidłowy tylko dla metod wywołania platformy.This member is valid for platform invoke methods only.

LPTStr 22

Ciąg znaków zależnych od platformy: ANSI w systemach Windows 98 i Unicode w systemach Windows NT i Windows XP.A platform-dependent character string: ANSI on Windows 98, and Unicode on Windows NT and Windows XP. Ta wartość jest obsługiwana tylko w przypadku wywołania platformy, a nie dla międzyoperacyjności modelu COM, ponieważ eksportowanie ciągu typu LPTStr nie jest obsługiwane.This value is supported only for platform invoke and not for COM interop, because exporting a string of type LPTStr is not supported.

LPUTF8Str 48

Wskaźnik do zakodowanego ciągu UTF-8.A pointer to a UTF-8 encoded string.

LPWStr 21

2-bajtowy, zakończony wartością null ciąg znaków Unicode.A 2-byte, null-terminated Unicode character string. Nie można użyć LPWStr wartości z niezarządzanym ciągiem, chyba że ciąg został utworzony przy użyciu funkcji niezarządzanej CoTaskMemAlloc .You cannot use the LPWStr value with an unmanaged string unless the string was created by using the unmanaged CoTaskMemAlloc function.

R4 11

4-bajtowa liczba zmiennoprzecinkowa.A 4-byte floating-point number.

R8 12

8-bajtowa liczba zmiennoprzecinkowa.An 8-byte floating-point number.

SafeArray 29

A SafeArray , czyli tablicę samoopisującą, która składa się z typu, rangi i granic skojarzonych danych tablicy.A SafeArray, which is a self-describing array that carries the type, rank, and bounds of the associated array data. Możesz użyć tego elementu członkowskiego z SafeArraySubType polem, aby przesłonić domyślny typ elementu.You can use this member with the SafeArraySubType field to override the default element type.

Struct 27

WARIANT, który jest używany do organizowania zarządzanych klas i typów wartości.A VARIANT, which is used to marshal managed formatted classes and value types.

SysInt 31

Zależne od platformy, liczba całkowita ze znakiem: 4 bajty w 32-bitowym systemie Windows, 8 bajtów w 64-bitowym systemie Windows.A platform-dependent, signed integer: 4 bytes on 32-bit Windows, 8 bytes on 64-bit Windows.

SysUInt 32

Zależna od platformy, liczba całkowita bez znaku: 4 bajty w 32-bitowym systemie Windows, 8 bajtów w 64-bitowym systemie Windows.A platform-dependent, unsigned integer: 4 bytes on 32-bit Windows, 8 bytes on 64-bit Windows.

TBStr 36

Prefiks, który został ustalony na platformie char : ANSI w systemie windows 98, Unicode w systemie Windows NT.A length-prefixed, platform-dependent char string: ANSI on Windows 98, Unicode on Windows NT. Rzadko używasz tego elementu członkowskiego like.You rarely use this BSTR-like member.

U1 4

1-bajtowa liczba całkowita bez znaku.A 1-byte unsigned integer.

U2 6

2-bajtowa liczba całkowita bez znaku.A 2-byte unsigned integer.

U4 8

4-bajtowa liczba całkowita bez znaku.A 4-byte unsigned integer.

U8 10

8-bajtowa liczba całkowita bez znaku.An 8-byte unsigned integer.

VariantBool 37

2-bajtowy, zdefiniowany przez OLE typ VARIANT_BOOL ( true =-1, false = 0).A 2-byte, OLE-defined VARIANT_BOOL type (true = -1, false = 0).

VBByRefStr 34

Wartość, która pozwala Visual Basic zmienić ciąg w kodzie niezarządzanym i mieć wyniki odzwierciedlone w kodzie zarządzanym.A value that enables Visual Basic to change a string in unmanaged code and have the results reflected in managed code. Ta wartość jest obsługiwana tylko w przypadku wywołania platformy.This value is only supported for platform invoke.

Przykłady

Poniższy fragment kodu ilustruje sposób deklarowania, w zarządzanym kodzie źródłowym, niezarządzany interfejs zaimplementowany przez składnik COM.The following code fragment demonstrates how to declare, in managed source code, an unmanaged interface implemented by a COM component. Ten System.Runtime.InteropServices.ComImportAttribute atrybut uniemożliwia IMyStorage wyeksportowanie interfejsu z powrotem do użycia przez model com.The System.Runtime.InteropServices.ComImportAttribute attribute prevents the IMyStorage interface from being exported back for use by 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.(COM clients should use the existing COM component directly.) In this example, MarshalAsAttribute specifies several UnmanagedType members, which represent the types used by the original 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

Uwagi

Użyj UnmanagedType wyliczenia z System.Runtime.InteropServices.MarshalAsAttribute atrybutem, aby określić, jak typy są organizowane podczas operacji międzyoperacyjności z niezarządzanym kodem.Use the UnmanagedType enumeration with the System.Runtime.InteropServices.MarshalAsAttribute attribute to specify how types are marshaled during interoperation with unmanaged code. To Wyliczenie służy do organizowania 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 .NET Framework i różne typy różne.You can use this enumeration to marshal code using simple value types (I1, I2, I4, I8, R4, R8, U2, U4, and U8), unmanaged types that are unavailable in the .NET Framework, and various miscellaneous types.

Aby uzyskać więcej informacji, zobacz współdziałanie z kodem niezarządzanym.For more information, see Interoperating with Unmanaged Code.

Dotyczy

Zobacz też