我正在编写一个WPF应用程序,该应用程序使用PINVOKE来调用我正在编写的dll。在dll中的一个导出函数中,调用SetupDiGetClassDevs。此时,在XP上运行应用程序时,我收到一个错误,首先是一个对话框说:
“程序入口点RegOpenKeyExW无法位于动态链接库KERNAL32.dll中。”
单击“确定”,然后引导我进入未处理的异常对话框。 WPP应用程序和DLL都是在Win7机器上使用VS2010构建的,并且该应用程序在Win7系统上运行良好。只有在XP上运行应用程序时才会出现此问题。如果我在dll中避免SetupDiGetClassDevs(和后续的SetUpdi函数调用),那么什么都不会出错;所以似乎PINVOKE机制正常工作。
任何想法出了什么问题?我对引用RegOpenKeyExW感到有点困惑,因为dll不是在启用UNICODE的情况下构建的。
由于 汤姆
答案 0 :(得分:1)
我强烈怀疑问题在于你的某些P / invoke代码,或者你的DLL中的直接LoadLibrary/GetProcAddress
绑定。问题是,RegOpenKeyEx
不属于kernel32
。它由advapi32
导出。我无法相信你有一个试图从kernel32
导入它的.lib文件所以我认为你应该在你的代码或第三方代码中寻找P / invoke或GetProcAddress
你包括在内。