在64位机器上编译32位的SetupDiCallClassInstaller时,会抛出ERROR_IN_WOW64错误。

4
在32位编译的情况下,在64位计算机上调用SetupDiCallClassInstaller会返回false。
GetLastError() == ERROR_IN_WOW64

所有其他的函数调用在32位环境下都可以正常工作,只有这个函数出现了问题。

我正在想知道是否有人知道我在这里做错了什么。


1
你不能从32位进程调用该函数。你必须编译你的程序以针对x64目标。 - Hans Passant
@HansPassant 限制它只能在x64上运行的理由是什么? - nathan
是的,那是一个比这个问题更有趣的问题。不要犹豫,开始一个新的问题吧。 - Hans Passant
@HansPassant 我创建了一个新问题!https://dev59.com/3F7Va4cB1Zd3GeqPM8jU - nathan
1个回答

2
正如Hans Passant在评论中指出的那样,你不能在64位Windows平台上的32位进程中调用该函数。当你尝试这样做时,会收到ERROR_IN_WOW64错误。 你不能这样做的原因是,你的32位进程调用了32位版本的API。在64位平台上,这个API正在WoW64窗口子系统中运行(参见https://en.wikipedia.org/wiki/WoW64)。一些方法,比如SetupDiCallClassInstaller,在这个子系统中不可用。当你尝试调用它们时,就会出现ERROR_IN_WOW64错误。应用程序应该直接调用64位版本的API。实现这一点的一种方法是重新编译面向64位平台的应用程序。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接