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。
如果它们相同,我可以重写它以使其更加一致,但如果不一致,我不想有一堆问题。
在这个例子中,没有区别。.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运行时将在其中查找别名。