UnmanagedType Enum

Definisi

Mengidentifikasi cara marshal parameter atau bidang ke kode yang tidak dikelola.

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
Warisan
UnmanagedType
Atribut

Bidang

AnsiBStr 35

String karakter ANSI yang merupakan byte tunggal berawalan panjang. Anda dapat menggunakan anggota ini pada String tipe data.

AsAny 40

Jenis dinamis yang menentukan jenis objek pada durasi dan marshal objek sebagai jenis tersebut. Anggota ini hanya berlaku untuk metode pemanggilan platform.

Bool 2

Nilai Boolean 4-byte (true != 0, false = 0). Ini adalah jenis Win32 BOOL.

BStr 19

String karakter Unicode yang merupakan byte ganda dengan awalan panjang. Anda dapat menggunakan anggota ini, yang merupakan string default di COM, pada String jenis data.

ByValArray 30

Value Ketika properti diatur ke ByValArray, SizeConst bidang harus diatur untuk menunjukkan jumlah elemen dalam array. Bidang ArraySubType dapat secara opsional berisi UnmanagedType elemen array ketika perlu membedakan di antara jenis string. Anda hanya dapat menggunakan ini UnmanagedType pada array yang elemennya muncul sebagai bidang dalam struktur.

ByValTStr 23

Digunakan untuk array karakter dengan panjang tetap yang muncul dalam struktur. ByValTStr jenis berulah seperti string gaya C, ukuran tetap di dalam struktur (misalnya, char s[5]). Jenis karakter yang digunakan dengan ByValTStr ditentukan oleh CharSet argumen atribut yang StructLayoutAttribute diterapkan ke struktur yang berisi. Selalu gunakan SizeConst bidang untuk menunjukkan ukuran array.

Currency 15

Jenis mata uang. Digunakan pada Decimal untuk marshal nilai desimal sebagai jenis mata uang COM alih-alih sebagai Decimal.

CustomMarshaler 44

Menentukan kelas marshaler kustom saat digunakan dengan MarshalType bidang atau MarshalTypeRef . Bidang MarshalCookie dapat digunakan untuk meneruskan informasi tambahan ke marshaler kustom. Anda dapat menggunakan anggota ini pada jenis referensi apa pun. Anggota ini hanya berlaku untuk parameter dan mengembalikan nilai. Ini tidak dapat digunakan pada bidang.

Error 45

Jenis asli yang terkait dengan I4 atau U4 dan yang menyebabkan parameter diekspor sebagai HRESULT di pustaka jenis yang diekspor.

FunctionPtr 38

Bilangan bulat yang dapat digunakan sebagai penunjuk fungsi gaya C. Anda dapat menggunakan anggota ini pada Delegate jenis data atau pada jenis yang mewarisi dari Delegate.

HString 47

String Windows Runtime. Anda dapat menggunakan anggota ini pada String tipe data. Dukungan bawaan untuk WinRT dihapus di .NET 5. Lihat Sebelumnya jenis yang didukung bawaan untuk solusinya.

I1 3

Bilangan bulat bertanda tangan 1-byte. Anda dapat menggunakan anggota ini untuk mengubah nilai Boolean menjadi gaya C bool 1-byte (true = 1, false = 0).

I2 5

Bilangan bulat bertanda tangan 2-byte.

I4 7

Bilangan bulat bertanda tangan 4-byte.

I8 9

Bilangan bulat bertanda tangan 8-byte.

IDispatch 26

Penunjuk COM IDispatch (Object di Microsoft Visual Basic 6.0).

IInspectable 46

Penunjuk antarmuka Windows Runtime. Anda dapat menggunakan anggota ini pada Object tipe data. Dukungan bawaan untuk WinRT dihapus di .NET 5.

Interface 28

Penunjuk antarmuka COM. Antarmuka Guid diperoleh dari metadata kelas. Gunakan anggota ini untuk menentukan jenis antarmuka yang tepat atau jenis antarmuka default jika Anda menerapkannya ke kelas. Anggota ini menghasilkan perilaku yang sama seperti IUnknown saat Anda menerapkannya ke Object jenis data.

IUnknown 25

Penunjuk COM IUnknown . Anda dapat menggunakan anggota ini pada Object tipe data.

LPArray 42

Penunjuk ke elemen pertama dari array gaya C. Saat marshaling dari kode terkelola ke tidak terkelola, panjang array ditentukan oleh panjang array terkelola. Saat marshaling dari kode yang tidak dikelola ke kode terkelola, panjang array ditentukan dari SizeConst bidang dan SizeParamIndex , secara opsional diikuti oleh jenis elemen yang tidak dikelola dalam array ketika perlu membedakan di antara jenis string.

LPStr 20

Satu byte, string karakter ANSI yang dihentikan null. Anda dapat menggunakan anggota ini pada String jenis data dan StringBuilder .

LPStruct 43

Penunjuk ke struktur gaya C yang Anda gunakan untuk marshal kelas berformat terkelola. Anggota ini hanya berlaku untuk metode pemanggilan platform.

LPTStr 22

String karakter Unicode. Nilai ini hanya didukung untuk pemanggilan platform dan bukan untuk interop COM, karena mengekspor string jenis LPTStr tidak didukung.

LPUTF8Str 48

Penunjuk ke string yang dikodekan UTF-8.

LPWStr 21

String karakter Unicode 2-byte dan dihentikan null. Anda tidak dapat menggunakan LPWStr nilai dengan string yang tidak dikelola kecuali string dibuat dengan menggunakan fungsi yang tidak dikelola CoTaskMemAlloc .

R4 11

Angka floating-point 4-byte.

R8 12

Angka floating-point 8-byte.

SafeArray 29

, SafeArrayyang merupakan array yang menjelaskan sendiri yang membawa jenis, peringkat, dan batas data array terkait. Anda dapat menggunakan anggota ini dengan SafeArraySubType bidang untuk mengambil alih jenis elemen default.

Struct 27

VARIAN, yang digunakan untuk marshal kelas berformat terkelola dan jenis nilai.

SysInt 31

Bilangan bulat yang bergantung pada platform: 4 byte pada Windows 32-bit, 8 byte pada Windows 64-bit.

SysUInt 32

Bilangan bulat yang bergantung pada platform dan tidak ditandatangani: 4 byte pada Windows 32-bit, 8 byte pada Windows 64-bit.

TBStr 36

String Unicode char berawalan panjang. Anda jarang menggunakan anggota seperti BSTR ini.

U1 4

Bilangan bulat 1-byte yang tidak ditandatangani.

U2 6

Bilangan bulat 2-byte yang tidak ditandatangani.

U4 8

Bilangan bulat 4-byte yang tidak ditandatangani.

U8 10

Bilangan bulat yang tidak ditandatangani 8-byte.

VariantBool 37

Jenis VARIANT_BOOL 2-byte yang ditentukan OLE (true = -1, false = 0).

VBByRefStr 34

Nilai yang memungkinkan Visual Basic mengubah string dalam kode tak terkelola dan memiliki hasil yang tercermin dalam kode terkelola. Nilai ini hanya didukung untuk pemanggilan platform.

Contoh

Fragmen kode berikut menunjukkan cara mendeklarasikan, dalam kode sumber terkelola, antarmuka yang tidak dikelola yang diimplementasikan oleh komponen COM. Atribut System.Runtime.InteropServices.ComImportAttribute mencegah IMyStorage antarmuka diekspor kembali untuk digunakan oleh COM. (Klien COM harus menggunakan komponen COM yang ada secara langsung.) Dalam contoh ini, MarshalAsAttribute menentukan beberapa UnmanagedType anggota, yang mewakili jenis yang digunakan oleh antarmuka COM asli.

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

Keterangan

UnmanagedType Gunakan enumerasi dengan System.Runtime.InteropServices.MarshalAsAttribute atribut untuk menentukan bagaimana jenis di-marshalasi selama interoperatasi dengan kode yang tidak dikelola. Anda dapat menggunakan enumerasi ini untuk kode marsekal menggunakan jenis nilai sederhana (I1, I2, I4, I8, R4, R8, U2, U4, dan U8), jenis tidak terkelola yang tidak tersedia dalam .NET Framework, dan berbagai jenis lain-lain.

Untuk informasi lebih lanjut, lihat Mengoperasikan dengan Kode Tak Terkelola.

Berlaku untuk

Lihat juga