Share via


エントリ ポイントの指定

エントリ ポイントは、DLL 内の関数の位置を識別します。マネージ プロジェクト内では、対象となる関数の元の名前または序数エントリ ポイントによって、その関数が相互運用の境界にまたがって識別されます。また、エントリ ポイントを別の名前に割り当てて、関数の名前を事実上変更できます。

DLL 関数の名前を変更する理由を次に示します。

  • 大文字と小文字が区別される API 関数名を使わないようにするため

  • 既存の名前付け標準に合わせるため

  • 異なるデータ型を受け取る複数の関数を共存させるため (同じ DLL 関数の複数のバージョンを宣言することによって)

  • ANSI バージョンと Unicode バージョンを持つ API の使用を簡単にするため

このトピックでは、マネージ コード内の DLL 関数の名前を変更する方法について説明します。

Visual Basic での関数名の変更

Visual Basic で DllImportAttribute.EntryPoint フィールドを設定するには、Declare ステートメントで Function キーワードを使います。基本的な宣言を次の例に示します。

Imports System.Runtime.InteropServices

Public Class Win32
    Declare Auto Function MsgBox Lib "user32.dll" _
       Alias MessageBox (ByVal hWnd As Integer, ByVal txt As String,_
       ByVal caption As String, ByVal Typ As Integer) As Integer
End Class

定義に Alias キーワードを含めることで、MessageBox エントリ ポイントを MsgBox に置き換えることができます。その例を次に示します。どちらの例でも、Auto キーワードを使って、エントリ ポイントの文字セットのバージョンを指定する手間を省いています。文字セットの選択の詳細については、「文字セットの指定」を参照してください。

Imports System.Runtime.InteropServices

Public Class Win32
    Declare Auto Function MsgBox Lib "user32.dll" _
       Alias MessageBox (ByVal hWnd As Integer, ByVal txt As String,_
       ByVal caption As String, ByVal Typ As Integer) As Integer
End Class

C# および C++ での関数名の変更

DLL 関数を名前または序数で指定するには、DllImportAttribute.EntryPoint フィールドを使います。メソッド定義内の関数の名前が DLL 内のエントリ ポイントと同じである場合は、その関数を EntryPoint フィールドで明示的に識別する必要はありません。同じでない場合は、次のいずれかの属性書式を使って、名前または序数を指示します。

[DllImport("dllname", EntryPoint="Functionname")]
[DllImport("dllname", EntryPoint="#123")]

序数の前にシャープ記号 (#) を付ける必要があることに注意してください。

EntryPoint フィールドを使ってコード内の MessageBoxAMsgBox に置き換える方法を次の例に示します。

using System.Runtime.InteropServices;

public class Win32 {
    [DllImport("user32.dll", EntryPoint="MessageBoxA")]
    public static extern int MsgBox(int hWnd, String text, String caption,
                                    uint type);
}
using namespace System::Runtime::InteropServices;

typedef void* HWND;
[DllImport("user32", EntryPoint="MessageBoxA")]
extern "C" int MsgBox(HWND hWnd,
                      String*  pText,
                      String*  pCaption,
                      unsigned int uType);

参照

関連項目

DllImportAttribute Class

概念

マネージ コードでのプロトタイプの作成
プラットフォーム呼び出しの例

その他の技術情報

プラットフォーム呼び出しによるデータのマーシャリング