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

4

正如标题所问,当您导入诸如User32.dll之类的DLL并声明要调用该DLL上的方法时,为什么这些方法需要声明为Static和Extern。

例如,这是从另一个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);

static:否则你需要以某种方式匹配实例与另一侧。并处理 this 参数。extern 因为你正在导入。 - H H
2个回答

4

static - 静态方法不需要类的实例,它们直接调用系统API而且不需要任何初始化,在静态或非静态块中使用都可以。

extern - extern修饰符用于声明从外部实现的方法。由于API方法没有在类文件本身中声明,所以extern告诉编译器该方法在其他地方被声明。


1
虽然我不确定是否有技术细节,但我认为原因是:
静态方法无法绑定到任何对象实例。如果将它们绑定到对象实例,则 DLL 必须每次跟踪调用该方法的实例。
我猜这只是一个关键字,告诉编译器插入绑定 DLL 的代码,而不是期望在 C# 中实现该方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接