正如标题所示,当您导入一个DLL(如User32.dll)并声明方法来调用该DLL上的方法时,为什么这些方法需要声明为Static和Extern。
I.E,这是从另一个StackOverflow答案中获取的,但是演示了我要问的内容。
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint cButtons, UIntPtr dwExtraInfo);
答案 0 :(得分:3)
static
- 因为它们不需要类的实例,那些方法是调用系统API而不需要任何初始化,可以在静态/非静态块中使用
extern
- extern修饰符用于声明外部实现的方法。由于API方法未在类文件本身中声明,因此extern告诉编译器声明了else-where。
答案 1 :(得分:1)
虽然我不知道是否有技术细节,但我会说原因是:
<强>静态强>
驻留在外部DLL中的方法不能绑定到任何对象实例。如果它们绑定到对象实例,则DLL必须每次都跟踪调用该方法的实例。
<强>的extern 强>
我想这只是一个关键字,告诉编译器插入用于绑定DLL的代码,而不是期望在C#中实现该方法。