DllImport user32 vs user32.dll

本文关键字:user32 dll vs DllImport | 更新日期: 2023-09-27 18:26:55

DllImport在这里的用法有什么区别?具体来说,"user32"的意思是"user32.dll",还是"user32.lib"或其他什么?

[DllImport("user32")]
protected static extern int GetKeyboardState(byte[] pbKeyState);
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
protected static extern short GetKeyState(int vKey);

您可能可以忽略CharSet和CallingConvention。

如果它们相同,我可以重写它以使其更加一致,但如果不一致,我不想有一堆问题。

DllImport user32 vs user32.dll

在这个例子中,没有区别。.dll扩展名将自动附加到"user32"以创建"user32.dll"。然而,情况并非总是如此。如果库文件名包含句点,则将自动追加.dll扩展名,而不是。

一些例子:

[DllImport("user32")]-->解析"User32.dll"。正确。

[DllImport("user32.dll")]-->解析"User32.dll"。正确。

[DllImport("mylib.version5")]-->解析"mylib.version5"。错误

[DllImport("mylib.version5.dll")]-->解析"mylib.version5.dll"。正确。

在Windows上没有区别,如果省略扩展,导入将成功执行。当使用<dllmap>配置部分运行Mono时,通常需要省略扩展,P/Invoke运行时将在其中查找别名。