4

32 ビット用にコンパイルされている場合、64 ビット マシンで SetupDiCallClassInstaller を呼び出すと、false が返されます。

GetLastError() == ERROR_IN_WOW64

他のすべての関数呼び出しは 32 ビットで問題なく動作しますが、これだけで問題が発生します。

ここで私が間違っていることを誰かが知っているかどうか疑問に思っています。

4

1 に答える 1

2

Hans Passant が質問に対するコメントとして指摘したように、64 ビット Windows プラットフォーム上の 32 ビット プロセスからその関数を呼び出すことはできません。とにかくそうしようとすると、ERROR_IN_WOW64 が発生します。これができない理由は、32 ビット プロセスが 32 ビット バージョンの API を呼び出すためです。64 ビット プラットフォームでは、この API は WoW64 Windows サブシステム ( https://en.wikipedia.org/wiki/WoW64 ) で実行されます。SetupDiCallClassInstaller などの一部のメソッドは、このサブシステム内では使用できません。それらを呼び出そうとすると、ERROR_IN_WOW64 が発生します。代わりに、アプリケーションは 64 ビット バージョンの API を直接呼び出す必要があります。これを実現する 1 つの方法は、64 ビット プラットフォームを対象とするアプリケーションを再コンパイルすることです。

于 2017-05-12T11:54:32.283 に答える