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)