导入DLL时为什么必须声明方法静态和外部?

时间:2013-03-25 15:00:33

标签: c#

正如标题所示,当您导入一个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);

2 个答案:

答案 0 :(得分:3)

static - 因为它们不需要类的实例,那些方法是调用系统API而不需要任何初始化,可以在静态/非静态块中使用

extern - extern修饰符用于声明外部实现的方法。由于API方法未在类文件本身中声明,因此extern告诉编译器声明了else-where。

的方法

答案 1 :(得分:1)

虽然我不知道是否有技术细节,但我会说原因是:

<强>静态
驻留在外部DLL中的方法不能绑定到任何对象实例。如果它们绑定到对象实例,则DLL必须每次都跟踪调用该方法的实例。

<强>的extern
我想这只是一个关键字,告诉编译器插入用于绑定DLL的代码,而不是期望在C#中实现该方法。