MarshalAsAttribute Kelas
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.
Menunjukkan cara melakukan marshal data antara kode terkelola dan tidak terkelola.
public ref class MarshalAsAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Field | System.AttributeTargets.Parameter | System.AttributeTargets.ReturnValue, Inherited=false)]
public sealed class MarshalAsAttribute : Attribute
[System.AttributeUsage(System.AttributeTargets.Field | System.AttributeTargets.Parameter | System.AttributeTargets.ReturnValue, Inherited=false)]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class MarshalAsAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Field | System.AttributeTargets.Parameter | System.AttributeTargets.ReturnValue, Inherited=false)>]
type MarshalAsAttribute = class
inherit Attribute
[<System.AttributeUsage(System.AttributeTargets.Field | System.AttributeTargets.Parameter | System.AttributeTargets.ReturnValue, Inherited=false)>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type MarshalAsAttribute = class
inherit Attribute
Public NotInheritable Class MarshalAsAttribute
Inherits Attribute
- Warisan
- Atribut
Contoh
Contoh berikut menerapkan ke MarshalAsAttribute bidang, parameter metode, dan nilai pengembalian metode dalam jenis terkelola.
using System;
using System.Text;
using System.Runtime.InteropServices;
class Program
{
//Applied to a parameter.
public void M1([MarshalAs(UnmanagedType.LPWStr)]String msg) {}
//Applied to a field within a class.
class MsgText {
[MarshalAs(UnmanagedType.LPWStr)]
public String msg = "Hello World";
}
//Applied to a return value.
[return: MarshalAs(UnmanagedType.LPWStr)]
public String GetMessage()
{
return "Hello World";
}
static void Main(string[] args)
{ }
}
Imports System.Runtime.InteropServices
Module Module1
Sub Main()
End Sub
'Applied to a parameter.
Public Sub M1(<MarshalAsAttribute(UnmanagedType.LPWStr)> ByVal msg As String)
msg = msg + "Goodbye"
End Sub
'Applied to a field within a class.
Class MsgText
<MarshalAsAttribute(UnmanagedType.LPWStr)> Public msg As String
End Class
'Applied to a return value.
Public Function M2() As <MarshalAsAttribute(UnmanagedType.LPWStr)> String
Return "Hello World"
End Function
End Module
Contoh berikut menerapkan atribut ke MarshalAsAttribute properti:
decimal _money;
public decimal Money
{
[return: MarshalAs(UnmanagedType.Currency)]
get { return this._money; }
[param: MarshalAs(UnmanagedType.Currency)]
set { this._money = value; }
}
Dim _money As Decimal
Public Property Money As <MarshalAs(UnmanagedType.Currency)> Decimal
Get
Return Me._money
End Get
Set(<MarshalAs(UnmanagedType.Currency)> value As Decimal)
Me._money = value
End Set
End Property
Keterangan
Anda dapat menerapkan atribut ini ke parameter, bidang, atau nilai yang dikembalikan.
Atribut ini bersifat opsional, karena setiap jenis data memiliki perilaku marshaling default. Atribut ini hanya diperlukan ketika jenis tertentu dapat di-marshalasikan ke beberapa jenis. Misalnya, Anda dapat melakukan marshal string ke kode yang tidak dikelola sebagai LPStr, , LPWStr, LPTStratau BStr. Secara default, runtime bahasa umum marshal parameter string sebagai BStr untuk metode COM. Anda dapat menerapkan atribut ke MarshalAsAttribute bidang atau parameter individual untuk menyebabkan string tertentu tersebut dirusak sebagai LPStr alih-alih BStr. Tlbexp.exe (Pengekspor Pustaka Jenis) meneruskan preferensi marshaling Anda ke runtime bahasa umum.
Beberapa parameter dan nilai yang dikembalikan memiliki perilaku marshaling default yang berbeda saat digunakan dengan interop COM atau pemanggilan platform. Secara default, runtime marshal parameter string (dan bidang dalam jenis nilai) sebagai LPStr metode atau fungsi pemanggilan platform. Untuk informasi tambahan, lihat Perilaku Marshaling Default.
Dalam kebanyakan kasus, atribut hanya mengidentifikasi format data yang tidak dikelola menggunakan UnmanagedType enumerasi, seperti yang ditunjukkan pada tanda tangan C# berikut:
public void SomeMethod([MarshalAs(UnmanagedType.LPStr)] String s)
Public Sub SomeMethod(<MarshalAs(UnmanagedType.LPStr)> s As String)
Beberapa UnmanagedType anggota enumerasi memerlukan informasi tambahan. Misalnya, informasi tambahan diperlukan ketika UnmanagedType adalah LPArray. Untuk deskripsi lengkap tentang cara menggunakan atribut ini dengan array, lihat Marshaling Default untuk Array.
Tlbimp.exe (Type Library Importer) juga menerapkan atribut ini ke parameter, bidang, dan nilai pengembalian untuk menunjukkan bahwa jenis data dalam pustaka jenis input bukan jenis default untuk jenis data terkelola yang sesuai. Tlbimp.exe selalu menerapkan MarshalAsAttribute ke dan Object jenis untuk kejelasanString, terlepas dari jenis yang ditentukan dalam pustaka jenis input.
Catatan
MarshalAsAttribute tidak mendukung marshaling jenis generik.
Konstruktor
MarshalAsAttribute(Int16) |
Menginisialisasi instans MarshalAsAttribute baru kelas dengan nilai yang ditentukan UnmanagedType . |
MarshalAsAttribute(UnmanagedType) |
Menginisialisasi instans MarshalAsAttribute baru kelas dengan anggota enumerasi yang ditentukan UnmanagedType . |
Bidang
ArraySubType |
Menentukan jenis elemen dari yang tidak terkelola LPArray atau ByValArray. |
IidParameterIndex |
Menentukan indeks parameter atribut tidak terkelola |
MarshalCookie |
Memberikan informasi tambahan kepada marshaler kustom. |
MarshalType |
Menentukan nama marshaler kustom yang sepenuhnya memenuhi syarat. |
MarshalTypeRef |
MarshalType Mengimplementasikan sebagai jenis. |
SafeArraySubType |
Menunjukkan jenis elemen dari SafeArray. |
SafeArrayUserDefinedSubType |
Menunjukkan jenis elemen yang ditentukan pengguna dari SafeArray. |
SizeConst |
Menunjukkan jumlah elemen dalam array panjang tetap atau jumlah karakter (bukan byte) dalam string yang akan diimpor. |
SizeParamIndex |
Menunjukkan parameter berbasis nol yang berisi jumlah elemen array, mirip |
Properti
TypeId |
Ketika diimplementasikan di kelas turunan, mendapatkan pengidentifikasi unik untuk ini Attribute. (Diperoleh dari Attribute) |
Value |
UnmanagedType Mendapatkan nilai data yang akan dijadikan marshal. |
Metode
Equals(Object) |
Mengembalikan nilai yang menunjukkan apakah instans ini sama dengan objek tertentu. (Diperoleh dari Attribute) |
GetHashCode() |
Mengembalikan kode hash untuk instans ini. (Diperoleh dari Attribute) |
GetType() |
Mendapatkan instans Type saat ini. (Diperoleh dari Object) |
IsDefaultAttribute() |
Ketika ditimpa di kelas turunan, menunjukkan apakah nilai instans ini adalah nilai default untuk kelas turunan. (Diperoleh dari Attribute) |
Match(Object) |
Saat ditimpa di kelas turunan, mengembalikan nilai yang menunjukkan apakah instans ini sama dengan objek tertentu. (Diperoleh dari Attribute) |
MemberwiseClone() |
Membuat salinan dangkal dari yang saat ini Object. (Diperoleh dari Object) |
ToString() |
Mengembalikan string yang mewakili objek saat ini. (Diperoleh dari Object) |
Implementasi Antarmuka Eksplisit
_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) |
Memetakan sekumpulan nama ke sekumpulan pengidentifikasi pengiriman yang sesuai. (Diperoleh dari Attribute) |
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) |
Mengambil informasi jenis untuk objek, yang dapat digunakan untuk mendapatkan informasi jenis untuk antarmuka. (Diperoleh dari Attribute) |
_Attribute.GetTypeInfoCount(UInt32) |
Mengambil jumlah antarmuka informasi jenis yang disediakan objek (baik 0 atau 1). (Diperoleh dari Attribute) |
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) |
Menyediakan akses ke properti dan metode yang diekspos oleh objek. (Diperoleh dari Attribute) |