SetupDiGetClassDevs导致在Win7上的VS2010内置的应用程序上出现错误

时间:2011-10-14 14:54:59

标签: windows-7 windows-xp pinvoke setupapi

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

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

单击“确定”,然后引导我进入未处理的异常对话框。 WPP应用程序和DLL都是在Win7机器上使用VS2010构建的,并且该应用程序在Win7系统上运行良好。只有在XP上运行应用程序时才会出现此问题。如果我在dll中避免SetupDiGetClassDevs(和后续的SetUpdi函数调用),那么什么都不会出错;所以似乎PINVOKE机制正常工作。

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

由于 汤姆

1 个答案:

答案 0 :(得分:1)

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