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 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
- Atribut
Bidang
AnsiBStr | 35 | String karakter ANSI yang merupakan byte tunggal berawalan panjang. Anda dapat menggunakan anggota ini pada String jenis 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 ( |
BStr | 19 | String karakter Unicode yang merupakan byte ganda berawalan panjang. Anda dapat menggunakan anggota ini, yang merupakan string default di COM, pada String jenis data. |
ByValArray | 30 |
Value Ketika properti diatur ke |
ByValTStr | 23 | Digunakan untuk array karakter dalam baris dan panjang tetap yang muncul dalam struktur.
|
Currency | 15 | Jenis mata uang. Digunakan pada Decimal untuk marshal nilai desimal sebagai jenis mata uang COM alih-alih sebagai |
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 jenis 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 |
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 |
IInspectable | 46 | Penunjuk antarmuka Windows Runtime. Anda dapat menggunakan anggota ini pada Object jenis 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 |
LPArray | 42 | Penunjuk ke elemen pertama dari array gaya C. Saat marsekal dari dikelola ke kode yang tidak dikelola, panjang array ditentukan oleh panjang array terkelola. Saat marsekal dari kode yang tidak dikelola ke 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 |
LPUTF8Str | 48 | Penunjuk ke string yang dikodekan UTF-8. |
LPWStr | 21 | String karakter Unicode 2-byte dan dihentikan null. Anda tidak dapat menggunakan |
R4 | 11 | Angka floating-point 4-byte. |
R8 | 12 | Angka floating-point 8-byte. |
SafeArray | 29 |
|
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 |
U1 | 4 | Bilangan bulat yang tidak ditandatangani 1 byte. |
U2 | 6 | Bilangan bulat yang tidak ditandatangani 2-byte. |
U4 | 8 | Bilangan bulat yang tidak ditandatangani 4-byte. |
U8 | 10 | Bilangan bulat yang tidak ditandatangani 8-byte. |
VariantBool | 37 | Jenis VARIANT_BOOL 2-byte yang ditentukan OLE ( |
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 diterapkan 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 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 lebih lanjut, lihat Mengoperasikan dengan Kode Tak Terkelola.