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定义的?
在您发布的示例中,您正在导入相同的方法。这允许你有两个不同的实现。这是代码生成器基本上无用的原因,如果你不了解它们生成的代码。 –