Bagikan melalui


PreserveSigAttribute Kelas

Definisi

Menunjukkan bahwa transformasi tanda tangan HRESULT yang terjadi selama panggilan interop COM harus ditekan.

public ref class PreserveSigAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Method, Inherited=false)]
public sealed class PreserveSigAttribute : Attribute
[System.AttributeUsage(System.AttributeTargets.Method, Inherited=false)]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class PreserveSigAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Method, Inherited=false)>]
type PreserveSigAttribute = class
    inherit Attribute
[<System.AttributeUsage(System.AttributeTargets.Method, Inherited=false)>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type PreserveSigAttribute = class
    inherit Attribute
Public NotInheritable Class PreserveSigAttribute
Inherits Attribute
Warisan
PreserveSigAttribute
Atribut

Contoh

Contoh berikut menunjukkan bagaimana Tlbexp.exe mengonversi metode C# tanpa PreserveSigAttribute saat mengekspor rakitan ke pustaka jenis COM.

Tanda tangan terkelola:

int DoSomething (long l);  

Tanda tangan tidak terkelola:

HRESULT DoSomething ([in] long l, [out, retval] int * i);  

Ketika Anda menerapkan PreserveSigAttribute ke metode C# yang sama dan mengekspor assembly, konversi metode berbeda dari contoh sebelumnya. Perhatikan bahwa Tlbexp.exe menghapus pengubah parameter HRESULT dan [out, retval].

Tanda tangan terkelola:

[PreserveSig] int DoSomething (long l);  

Tanda tangan tidak terkelola:

int DoSomething ([in] long l);  

Keterangan

Anda dapat menerapkan atribut ini ke metode.

Secara default, Tlbexp.exe (Pengekspor Pustaka Jenis) memastikan bahwa panggilan yang mengembalikan HRESULT S_OK ditransformasikan sehingga parameter [out, retval] digunakan sebagai nilai pengembalian fungsi. HRESULT S_OK dibuang. Untuk HRESULT selain S_OK, runtime melempar pengecualian dan membuang parameter [out, retval]. Saat Anda menerapkan ke PreserveSigAttribute tanda tangan metode terkelola, tanda tangan terkelola dan tidak terkelola dari metode yang diatribusikan identik.

Mempertahankan tanda tangan metode asli diperlukan jika anggota mengembalikan lebih dari satu nilai HRESULT yang berhasil dan Anda ingin mendeteksi nilai yang berbeda. Karena sebagian besar anggota COM mengembalikan HRESULT, dengan menerapkan PreserveSigAttribute, Anda dapat mengambil bilangan bulat yang mewakili HRESULT yang berhasil atau gagal. Tlbexp.exe mempertahankan parameter [out, retval] sebagai parameter keluar dalam tanda tangan terkelola.

Tlbimp.exe (Type Library Importer) juga menerapkan atribut ini; ini menerapkan atribut ke dispinterfaces ketika mengimpor pustaka jenis.

Catatan

Mengembalikan jenis Currency, , dan Object tidak didukung oleh PreserveSigAttribute kelas ketika interoperatasi terjadi dari COM ke kode terkelola dan kode terkelola ditandai dengan PreserveSigAttributeGuidkelas . Ketika Anda mencoba menggunakan salah satu jenis pengembalian ini dengan PreserveSigAttribute kelas selama kondisi ini, akan TypeLoadException dilemparkan.

Konstruktor

PreserveSigAttribute()

Menginisialisasi instans baru kelas PreserveSigAttribute.

Properti

TypeId

Ketika diimplementasikan di kelas turunan, mendapatkan pengidentifikasi unik untuk ini Attribute.

(Diperoleh dari Attribute)

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)

Berlaku untuk

Lihat juga