次の方法で共有


DllImportAttribute.PreserveSig フィールド

シグネチャがアンマネージ エントリ ポイントを直接変換したものかどうかを示します。

Public PreserveSig As Boolean
[C#]
public bool PreserveSig;
[C++]
public: bool PreserveSig;
[JScript]
public var PreserveSig : Boolean;

解説

プラットフォーム呼び出しで呼び出されるメソッドのほとんどは HRESULT を返しません。この場合、HRESULT/[out, retval] の変換は意味がありません。このため、既定の動作では、シグネチャを定義どおりに保持します。このフィールドの既定値は true です。

既定の動作をオーバーライドして、シグネチャを変換する必要があるときもあります。たとえば、 HRESULT CoCreateInstance(...) などのメソッドの定義では、このフィールドを false に設定する必要があります。 false に設定すると、HRESULT に S_OK を返す呼び出しは、[out, retval] パラメータが関数の戻り値として使用されるように、変換されます。S_OK の HRESULT は破棄されます。HRESULT が S_OK 以外の場合、共通言語ランタイムは例外をスローして、[out, retval] パラメータを破棄します。HRESULT を返すメソッドだけが変換の対象となります。

このフィールドは PreserveSigAttribute と似ていますが、 PreserveSig フィールドとは異なり、この属性の既定値は false です。

使用例

[Visual Basic, C#] 場合によっては、Visual Basic の開発者は、マネージ コードで DLL 関数を定義する際、 Declare ステートメントを使用する代わりに、 DllImportAttribute を使用します。 PreserveSig フィールドの設定は、このような事例の 1 つです。

 
Imports System.Runtime.InteropServices
Public Class Win32
    <DllImport ("user32.dll", PreserveSig := False)> _
    Public Shared Function MessageBoxA (ByVal hWnd As _
    Integer, ByVal txt As String, ByVal caption As String, _
    ByVal Typ As Integer) As Integer 
    End Function
End Class
      
[C#] 
using System.Runtime.InteropServices;
public class Win32 {
    [DllImport("user32.dll", PreserveSig=false)]
    public static extern int MessageBoxA(int hWnd, String text, String 
       caption, uint type);
}
      
[C++]
using namespace System::Runtime::InteropServices;
typedef void* HWND;
[DllImport("user32", PreserveSig=true)]
extern "C" int MessageBoxA(HWND hWnd,
                          String* pText,
                          String* pCaption,
                          unsigned int uType);
      

[C++, JScript] C++ および JScript のサンプルはありません。Visual Basic および C# のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

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

参照

DllImportAttribute クラス | DllImportAttribute メンバ | System.Runtime.InteropServices 名前空間 | PreserveSigAttribute