次の方法で共有


PreserveSigAttribute クラス

COM 相互運用呼び出し中に発生する HRESULT または retval シグネチャ変換を中止することを示します。

この型のすべてのメンバの一覧については、PreserveSigAttribute メンバ を参照してください。

System.Object
   System.Attribute
      System.Runtime.InteropServices.PreserveSigAttribute

<AttributeUsage(AttributeTargets.Method)>
NotInheritable Public Class PreserveSigAttribute   Inherits Attribute
[C#]
[AttributeUsage(AttributeTargets.Method)]
public sealed class PreserveSigAttribute : Attribute
[C++]
[AttributeUsage(AttributeTargets::Method)]
public __gc __sealed class PreserveSigAttribute : public Attribute
[JScript]
public
   AttributeUsage(AttributeTargets.Method)
class PreserveSigAttribute extends Attribute

スレッドセーフ

この型の public static (Visual Basicでは Shared) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。

解説

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

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

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

タイプ ライブラリ インポータ (Tlbimp.exe) もこの属性を適用します。Tlbimp.exe は、タイプ ライブラリをインポートするときにこの属性をディスパッチ インターフェイスに適用します。

使用例

アセンブリを COM タイプ ライブラリにエクスポートするときに、Tlbexp.exe が PreserveSigAttribute なしで C# メソッドを変換する場合の例を次に示します。

マネージ シグネチャ:

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);

必要条件

名前空間: System.Runtime.InteropServices

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

アセンブリ: Mscorlib (Mscorlib.dll 内)

参照

PreserveSigAttribute メンバ | System.Runtime.InteropServices 名前空間 | タイプ ライブラリ エクスポータ (Tlbexp.exe) | タイプ ライブラリ インポータ (Tlbimp.exe)