PreserveSigAttribute クラス

定義

COM 相互運用呼び出し中に行われる 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
属性

次の例 Tlbexp.exe、アセンブリを COM タイプ ライブラリにエクスポートせずに PreserveSigAttribute C# メソッドを変換する方法を示しています。

マネージド署名:

int DoSomething (long l);  

アンマネージド シグネチャ:

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

同じ C# メソッドに適用 PreserveSigAttribute してアセンブリをエクスポートすると、メソッド変換は前の例とは異なります。 Tlbexp.exe は、HRESULT および [out, retval] パラメーター修飾子を削除します。

マネージド署名:

[PreserveSig] int DoSomething (long l);  

アンマネージド シグネチャ:

int DoSomething ([in] long l);  

注釈

この属性はメソッドに適用できます。

既定では、 Tlbexp.exe (タイプ ライブラリ エクスポーター) により、関数の戻り値として [out, retval] パラメーターが使用されるように、S_OKの HRESULT を返す呼び出しが確実に変換されます。 S_OK HRESULT は破棄されます。 S_OK以外の HRESULT の場合、ランタイムは例外をスローし、[out, retval] パラメーターを破棄します。 をマネージド メソッド シグネチャに適用 PreserveSigAttribute すると、属性付きメソッドのマネージド シグネチャとアンマネージド シグネチャは同じです。

メンバーが複数の成功 HRESULT 値を返し、異なる値を検出する場合は、元のメソッドシグネチャを保持する必要があります。 ほとんどの COM メンバーは HRESULT を返すので、 を PreserveSigAttribute適用することで、成功または失敗の HRESULT を表す整数を取得できます。 Tlbexp.exe は、[out, retval] パラメーターを out パラメーターとしてマネージド シグネチャに保持します。

Tlbimp.exe (タイプ ライブラリ インポーター) もこの属性を適用します。タイプ ライブラリをインポートするときに、 属性を dispinterface に適用します。

注意

COM からマネージド コードへの相互運用が行われ、Objectマネージド コードが クラスでPreserveSigAttributeマークされている場合、および の戻り値の型CurrencyGuidは、 クラスでは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)

一連の名前を対応する一連のディスパッチ識別子に割り当てます。

(継承元 Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

オブジェクトの型情報を取得します。この情報はインターフェイスの型情報の取得に使用できます。

(継承元 Attribute)
_Attribute.GetTypeInfoCount(UInt32)

オブジェクトが提供する型情報インターフェイスの数 (0 または 1) を取得します。

(継承元 Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

オブジェクトによって公開されたプロパティおよびメソッドへのアクセスを提供します。

(継承元 Attribute)

適用対象

こちらもご覧ください