PreserveSigAttribute クラス
アセンブリ: mscorlib (mscorlib.dll 内)

<ComVisibleAttribute(True)> _ <AttributeUsageAttribute(AttributeTargets.Method, Inherited:=False)> _ Public NotInheritable Class PreserveSigAttribute Inherits Attribute
[ComVisibleAttribute(true)] [AttributeUsageAttribute(AttributeTargets.Method, Inherited=false)] public sealed class PreserveSigAttribute : Attribute
[ComVisibleAttribute(true)] [AttributeUsageAttribute(AttributeTargets::Method, Inherited=false)] public ref class PreserveSigAttribute sealed : public Attribute

既定では、タイプ ライブラリ エクスポータ (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 からマネージ コードへの相互運用時に、マネージ コードが PreserveSigAttribute クラスでマークされていた場合、PreserveSigAttribute クラスでは、戻り値の Currency、Guid、および Object の型はサポートされません。これらの条件で、これらのいずれかの戻り値の型を PreserveSigAttribute クラスで使用すると、TypeLoadException がスローされます。 |

アセンブリを 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.Attribute
System.Runtime.InteropServices.PreserveSigAttribute


Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


- PreserveSigAttribute クラスのページへのリンク