UnmanagedType Enum

Definisi

Mengidentifikasi cara membuat parameter atau bidang marshal 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

Nama Nilai Deskripsi
Bool 2

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

I1 3

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

U1 4

Bilangan bulat yang tidak ditandatangani 1 byte.

I2 5

Bilangan bulat bertanda tangan 2 byte.

U2 6

Bilangan bulat yang tidak ditandatangani 2 byte.

I4 7

Bilangan bulat bertanda tangan 4-byte.

U4 8

Bilangan bulat yang tidak ditandatangani 4 byte.

I8 9

Bilangan bulat bertanda tangan 8-byte.

U8 10

Bilangan bulat yang tidak ditandatangani 8 byte.

R4 11

Angka floating-point 4-byte.

R8 12

Angka floating-point 8-byte.

Currency 15

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

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.

LPStr 20

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

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 .

LPTStr 22

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

ByValTStr 23

Digunakan untuk array karakter dengan panjang tetap sebaris 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.

IUnknown 25

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

IDispatch 26

Com IDispatch pointer (Object di Microsoft Visual Basic 6.0).

Struct 27

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

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.

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.

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.

SysInt 31

Bilangan bulat yang bergantung pada platform, yang ditandatangani: 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.

VBByRefStr 34

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

AnsiBStr 35

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

TBStr 36

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

VariantBool 37

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

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.

AsAny 40

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

LPArray 42

Penunjuk ke elemen pertama dari array gaya C. Saat melakukan marsekal dari kode terkelola ke tidak terkelola, panjang array ditentukan oleh panjang array terkelola. Saat marshaling dari 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.

LPStruct 43

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

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.

IInspectable 46

Penunjuk antarmuka Windows Runtime. Anda dapat menggunakan anggota ini pada Object jenis data. dukungan Built-in untuk WinRT dihapus dalam .NET 5.

HString 47

String Windows Runtime. Anda dapat menggunakan anggota ini pada String jenis data. dukungan Built-in untuk WinRT dihapus dalam .NET 5. Lihat Sebelumnya jenis bawaan yang didukung untuk solusinya.

LPUTF8Str 48

Penunjuk ke string yang dikodekan UTF-8.

Contoh

Fragmen kode berikut menunjukkan cara mendeklarasikan, dalam kode sumber terkelola, antarmuka yang tidak dikelola yang diterapkan oleh komponen COM. Atribut System.Runtime.InteropServices.ComImportAttribute mencegah antarmuka diekspor IMyStorage 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-marshal selama interoperatasi dengan kode yang tidak dikelola. Anda dapat menggunakan enumerasi ini untuk kode marshal 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 selengkapnya, lihat Mengoperasikan dengan Kode Tidak Terkelola.

Berlaku untuk

Lihat juga