2011-12-30 13 views
3

32ビット用にコンパイルされたときに64ビットマシンでSetupDiCallClassInstallerを呼び出すとfalseが返されます。64ビットマシンで32ビット用にコンパイルすると、SetupDiCallClassInstallerがERROR_IN_WOW64をスローします。

GetLastError() == ERROR_IN_WOW64 

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

私がここで間違っていることを誰かが知っているのだろうかと思います。

+1

32ビットプロセスからその関数を呼び出すことはできません。プログラムをコンパイルしてx64をターゲットにする必要があります。 –

+0

@HansPassantそれをx64に制限する合理的な背後にありますか? – nathan

+0

はい。それは、これよりずっと面白い質問です。新しい質問を始めることをためらってください。 –

答えて

0

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を直接呼び出す必要があります。これを実現する1つの方法は、64ビットプラットフォームをターゲットとするアプリケーションを再コンパイルすることです。

関連する問題