3
雖然通過SWig生成的包裝器,但我發現PInvokes沒有任何入口點,但是有些地方我發現它們使用Entrypoint進行了定義。那麼,它們之間的區別,例如:爲什麼我需要使用EntryPoint屬性來定義DLLImport
//定義不切入點
[DllImport("Kernel32.dll", CharSet = CharSet.Unicode)]
public static extern bool ReadFile(
HandleRef hndRef,
StringBuilder buffer,
int numberOfBytesToRead,
out int numberOfBytesRead,
int flag);
//與入口點定義
[DllImport("Kernel32.dll", CharSet = CharSet.Unicode, EntryPoint = "ReadFile")]
public static extern bool ReadFile2(
HandleRef hndRef,
StringBuilder buffer,
int numberOfBytesToRead,
out int numberOfBytesRead,
Overlapped2 flag);
}
也是爲什麼函數必須是靜態的,如在公共靜態外部?根據extern的考慮,我認爲它告訴編譯器這個方法是由externaly定義的?
在您發佈的示例中,您正在導入相同的方法。這允許你有兩個不同的實現。這是代碼生成器基本上無用的原因,如果你不瞭解它們生成的代碼。 –