在浏览由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
是告诉编译器该方法在外部定义的意思。