PreserveSigAttribute 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
表示應該隱藏 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
- 繼承
- 屬性
範例
下列範例示範如何將元件匯出至 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標示。 GuidPreserveSigAttribute 當您嘗試在這些情況下搭配 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) |