SWigで生成されたラッパーを調べていると、PInvokesにはエントリポイントが定義されていないことがわかりましたが、一部の場所にはエントリポイントがあります。では、それらの違いは何ですか?いつEntryPointを定義する必要があり、いつ定義する必要はありませんか?
なしで定義EntryPoint
:
[DllImport("Kernel32.dll", CharSet = CharSet.Unicode)]
public static extern bool ReadFile(
HandleRef hndRef,
StringBuilder buffer,
int numberOfBytesToRead,
out int numberOfBytesRead,
int flag);
で定義Entrypoint
:
[DllImport("Kernel32.dll", CharSet = CharSet.Unicode, EntryPoint = "ReadFile")]
public static extern bool ReadFile2(
HandleRef hndRef,
StringBuilder buffer,
int numberOfBytesToRead,
out int numberOfBytesRead,
Overlapped2 flag);
また、なぜ関数は次のようにならなければならないのstatic
ですpublic static extern
か?extern
このメソッドが外部で定義されていることをコンパイラに伝えていると思いますか?