1

我正在编写一个 WPF 应用程序,它使用 PINVOKE 来调用我也在编写的 dll。在 dll 中的一个导出函数中,调用了 SetupDiGetClassDevs。此时,在XP上运行该应用程序时,我得到一个错误,首先是一个对话框说:

“无法在动态链接库 KERNAL32.dll 中找到程序入口点 RegOpenKeyExW。”

单击确定然后将我带到一个未处理的异常对话框。WPP应用程序和dll都是在Win7机器上用VS2010构建的,应用程序在Win7系统上运行良好。只有在 XP 上运行应用程序时才会出现此问题。如果我避免在 dll 中使用 SetupDiGetClassDevs(以及随后的 SetUpdi 函数调用),则不会出错;所以看起来 PINVOKE 机制工作正常。

任何想法出了什么问题?我对看到引用 RegOpenKeyExW 感到有些困惑,因为 dll 不是在启用 UNICODE 的情况下构建的。

谢谢汤姆

4

1 回答 1

1

我强烈怀疑问题出在您的某些 P/invoke 代码中,或者可能是LoadLibrary/GetProcAddress您的 DLL 中的直接绑定。问题是,RegOpenKeyEx不是kernel32. 它由 导出advapi32。我不敢相信你有一个 .lib 文件试图从中导入它,所以我认为你应该在你的代码或你所包含的第三方代码中kernel32寻找 P/invoke 或 a 。GetProcAddress

于 2011-10-14T15:38:14.070 回答