PreserveSigAttribute PreserveSigAttribute PreserveSigAttribute PreserveSigAttribute Class


COM 相互運用呼び出し中に発生する HRESULT または retval シグネチャ変換を中止することを示します。Indicates that the HRESULT or retval signature transformation that takes place during COM interop calls should be suppressed.

public ref class PreserveSigAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Method, Inherited=false)]
public sealed class PreserveSigAttribute : Attribute
type PreserveSigAttribute = class
    inherit Attribute
Public NotInheritable Class PreserveSigAttribute
Inherits Attribute

次の例では、tlbexp.exe がアセンブリをC# COM タイプPreserveSigAttributeライブラリにエクスポートする場合を除いて、tlbexp.exe がメソッドを変換する方法を示します。The following example shows how Tlbexp.exe converts a C# method without PreserveSigAttribute when exporting an assembly to a COM type library.

マネージシグネチャ:Managed signature:

int DoSomething (long l);  

アンマネージシグネチャ:Unmanaged signature:

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

同じC#メソッドにPreserveSigAttributeを適用し、アセンブリをエクスポートする場合、メソッドの変換は前の例とは異なります。When you apply PreserveSigAttribute to the same C# method and export the assembly, the method conversion differs from the previous example. Tlbexp.exe は、HRESULT と [out, retval] パラメーター修飾子を削除することに注意してください。Notice that Tlbexp.exe removes the HRESULT and the [out, retval] parameter modifier.

マネージシグネチャ:Managed signature:

[PreserveSig] int DoSomething (long l);  

アンマネージシグネチャ:Unmanaged signature:

int DoSomething ([in] long l);  


この属性をメソッドに適用できます。You can apply this attribute to methods.

既定では、 tlbexp.exe (タイプライブラリエクスポーター)によって、HRESULT の HRESULT を返す呼び出しが、[out, retval] パラメーターが関数の戻り値として使用されるように変換されます。By default, the Tlbexp.exe (Type Library Exporter) ensures that a call that returns an HRESULT of S_OK is transformed such that the [out, retval] parameter is used as the function return value. S_OK HRESULT は破棄されます。The S_OK HRESULT is discarded. Hresult が S_OK 以外の場合、ランタイムは例外をスローし、[out, retval] パラメーターを破棄します。For HRESULTs other than S_OK, the runtime throws an exception and discards the [out, retval] parameter. をマネージメソッドシグネチャPreserveSigAttributeに適用すると、属性付きメソッドのマネージシグネチャとアンマネージシグネチャは同じになります。When you apply the PreserveSigAttribute to a managed method signature, the managed and unmanaged signatures of the attributed method are identical.

メンバーが複数の成功する HRESULT 値を返し、異なる値を検出する場合は、元のメソッドシグネチャを保持する必要があります。Preserving the original method signature is necessary if the member returns more than one success HRESULT value and you want to detect the different values. ほとんどのPreserveSigAttributeCOM メンバーは hresult を返すため、を適用すると、成功または失敗の hresult を表す整数を取得できます。Since most COM member return an HRESULT, by applying the PreserveSigAttribute, you can retrieve an integer representing the success or failure HRESULT. Tlbexp.exe は、すべての [out, retval] パラメーターをマネージシグネチャの out パラメーターとして保持します。Tlbexp.exe preserves any [out, retval] parameters as out parameters in the managed signature.

Tlbimp.exe (タイプライブラリインポーター)でもこの属性が適用されます。この属性は、タイプライブラリをインポートするときに、ディスパッチインターフェイスに適用されます。The Tlbimp.exe (Type Library Importer) also applies this attribute; it applies the attribute to dispinterfaces when it imports a type library.


CurrencyPreserveSigAttribute PreserveSigAttribute 、およびのObject戻り値の型は、クラスではサポートされていません。これは、COM からマネージコードへの相互運用が行われ、マネージコードがクラスでマークされてGuidいる場合です。Return types of Currency, Guid, and Object are not supported by the PreserveSigAttribute class when interoperation occurs from COM to managed code and the managed code is marked with the PreserveSigAttribute class. これらの条件TypeLoadExceptionでこれらの戻り値の型のいずれPreserveSigAttributeかをクラスで使用しようとすると、がスローされます。When you attempt to use one of these return types with the PreserveSigAttribute class during these conditions, a TypeLoadException is thrown.


PreserveSigAttribute() PreserveSigAttribute() PreserveSigAttribute() PreserveSigAttribute()

PreserveSigAttribute クラスの新しいインスタンスを初期化します。Initializes a new instance of the PreserveSigAttribute class.


Equals(Object) Equals(Object) Equals(Object) Equals(Object)

このインスタンスが、指定されたオブジェクトと等価であるかどうかを示す値を返します。Returns a value that indicates whether this instance is equal to a specified object.

(Inherited from Attribute)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

このインスタンスのハッシュ コードを返します。Returns the hash code for this instance.

(Inherited from Attribute)
GetType() GetType() GetType() GetType()

現在のインスタンスの Type を取得します。Gets the Type of the current instance.

(Inherited from Object)
IsDefaultAttribute() IsDefaultAttribute() IsDefaultAttribute() IsDefaultAttribute()

派生クラスでオーバーライドされるとき、このインスタンスの値が派生クラスの既定値であるかどうかを示します。When overridden in a derived class, indicates whether the value of this instance is the default value for the derived class.

(Inherited from Attribute)
Match(Object) Match(Object) Match(Object) Match(Object)

派生クラス内でオーバーライドされたときに、指定したオブジェクトとこのインスタンスが等しいかどうかを示す値を返します。When overridden in a derived class, returns a value that indicates whether this instance equals a specified object.

(Inherited from Attribute)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

現在の Object の簡易コピーを作成します。Creates a shallow copy of the current Object.

(Inherited from Object)
ToString() ToString() ToString() ToString()

現在のオブジェクトを表す文字列を返します。Returns a string that represents the current object.

(Inherited from Object)


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

一連の名前を対応する一連のディスパッチ識別子に割り当てます。Maps a set of names to a corresponding set of dispatch identifiers.

(Inherited from Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

オブジェクトの型情報を取得します。この情報はインターフェイスの型情報の取得に使用できます。Retrieves the type information for an object, which can be used to get the type information for an interface.

(Inherited from Attribute)
_Attribute.GetTypeInfoCount(UInt32) _Attribute.GetTypeInfoCount(UInt32) _Attribute.GetTypeInfoCount(UInt32) _Attribute.GetTypeInfoCount(UInt32)

オブジェクトが提供する型情報インターフェイスの数 (0 または 1) を取得します。Retrieves the number of type information interfaces that an object provides (either 0 or 1).

(Inherited from Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

オブジェクトによって公開されたプロパティおよびメソッドへのアクセスを提供します。Provides access to properties and methods exposed by an object.

(Inherited from Attribute)


TypeId TypeId TypeId TypeId

派生クラスで実装されると、この Attribute の一意の識別子を取得します。When implemented in a derived class, gets a unique identifier for this Attribute.

(Inherited from Attribute)