UnmanagedType Enum
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
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
- Atribut
Bidang
| Nama | Nilai | Deskripsi |
|---|---|---|
| Bool | 2 | Nilai Boolean 4-byte ( |
| I1 | 3 | Bilangan bulat bertanda tangan 1-byte. Anda dapat menggunakan anggota ini untuk mengubah nilai Boolean menjadi 1 byte, gaya |
| 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 |
| 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 |
| LPTStr | 22 | String karakter Unicode. Nilai ini hanya didukung untuk pemanggilan platform dan bukan untuk interop COM, karena mengekspor string jenis |
| ByValTStr | 23 | Digunakan untuk array karakter dengan panjang tetap sebaris yang muncul dalam struktur.
|
| IUnknown | 25 | Penunjuk COM |
| IDispatch | 26 | Com |
| 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 | , |
| ByValArray | 30 |
Value Ketika properti diatur ke |
| 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 |
| VariantBool | 37 | Jenis VARIANT_BOOL 2-byte yang ditentukan OLE ( |
| 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.