PreserveSigAttribute 類別

定義

表示應該隱藏 COM Interop 呼叫期間發生的 HRESULT 簽章轉換。

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
繼承
PreserveSigAttribute
屬性

範例

下列範例示範如何將元件匯出至 COM 型別程式庫時,Tlbexp.exe將 C# 方法轉換成不含 PreserveSigAttribute 的 。

受控簽章:

int DoSomething (long l);  

非受控簽章:

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

當您套用 PreserveSigAttribute 至相同的 C# 方法並匯出元件時,方法轉換與先前的範例不同。 請注意,Tlbexp.exe移除 HRESULT 和 [out, retval] 參數修飾詞。

受控簽章:

[PreserveSig] int DoSomething (long l);  

非受控簽章:

int DoSomething ([in] long l);  

備註

您可以將此屬性套用至方法。

根據預設, Tlbexp.exe (型別程式庫匯出工具) 確保會轉換傳回 S_OK HRESULT 的呼叫,以便將 [out, retval] 參數當做函式傳回值使用。 會捨棄S_OK HRESULT。 針對 S_OK 以外的 HRESULT,執行時間會擲回例外狀況,並捨棄 [out, retval] 參數。 當您將 套用 PreserveSigAttribute 至 Managed 方法簽章時,屬性方法的 Managed 和 Unmanaged 簽章完全相同。

如果成員傳回一個以上的成功 HRESULT 值,而且您想要偵測不同的值,則需要保留原始方法簽章。 由於大部分 COM 成員都會傳回 HRESULT,因此您可以套用 PreserveSigAttribute 來擷取代表成功或失敗 HRESULT 的整數。 Tlbexp.exe保留任何 [out, retval] 參數作為 Managed 簽章中的 out 參數。

Tlbimp.exe (型別程式庫匯入工具) 也會套用此屬性;它會在匯入型別程式庫時,將 屬性套用至 dispinterfaces。

注意

從 COM 到 Managed 程式碼進行交互操作時,類別不支援 、 和 的 Currency 傳回型別,而且 Managed 程式碼會以 PreserveSigAttribute 類別 Object 標示。 Guid PreserveSigAttribute 當您嘗試在這些情況下搭配 PreserveSigAttribute 類別使用其中一個傳回型別時, TypeLoadException 會擲回 。

建構函式

PreserveSigAttribute()

初始化 PreserveSigAttribute 類別的新執行個體。

屬性

TypeId

在衍生類別中實作時,取得這個 Attribute 的唯一識別碼。

(繼承來源 Attribute)

方法

Equals(Object)

傳回值,這個值指出此執行個體是否與指定的物件相等。

(繼承來源 Attribute)
GetHashCode()

傳回這個執行個體的雜湊碼。

(繼承來源 Attribute)
GetType()

取得目前執行個體的 Type

(繼承來源 Object)
IsDefaultAttribute()

在衍生類別中覆寫時,表示這個執行個體的值是衍生類別的預設值。

(繼承來源 Attribute)
Match(Object)

在衍生類別中覆寫時,會傳回值,表示這個執行個體是否等於指定物件。

(繼承來源 Attribute)
MemberwiseClone()

建立目前 Object 的淺層複製。

(繼承來源 Object)
ToString()

傳回代表目前物件的字串。

(繼承來源 Object)

明確介面實作

_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

將一組名稱對應至一組對應的分派識別項 (Dispatch Identifier)。

(繼承來源 Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

擷取物件的類型資訊,可以用來取得介面的類型資訊。

(繼承來源 Attribute)
_Attribute.GetTypeInfoCount(UInt32)

擷取物件提供的類型資訊介面數目 (0 或 1)。

(繼承來源 Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

提供物件所公開的屬性和方法的存取權。

(繼承來源 Attribute)

適用於

另請參閱