10

Visual Studio 2010 (Windows 7 64 ビット) で 64 ビットの C++ プロジェクトを作成しました。

私は 64 ビット アプリケーションを実行していると思っていましたが、次のコードはtrueを返しました。

bool is64bit = (sizeof(void*)==8);

しかし、関数を呼び出すと、FALSEIsWow64Processが返されました...

もっと奇妙なこと:

  • LoadLibrary()dll をロードする呼び出しはc:\windows\system32\some.dllうまく機能します
  • dll の読み込みc:\windows\sysWow64\some.dllに失敗します (エラー コード 193: some.dll は有効な win32 アプリケーションではありません)

これらのエラーはすべて、アプリケーションが 32 ビット モードで実行されていることを示していますが、これはポインタ型が 8 バイト長であるという事実に反しています。

私は混乱しています、助けていただければ幸いです!

4

2 に答える 2

10

LoadLibrary()を呼び出してc:\ windows \ system32\some.dllの下にあるdllをロードするとうまくいきます。c:\ windows \ sysWow64\some.dllの下にdllをロードすると失敗します

あなたが言うことはすべて、64ビットを実行していることを示唆しています。

Windows 64ビットでは、System32フォルダーには64ビットバージョンのDLLSysWow64が含まれ、フォルダーには32ビットバージョンが含まれます。TRUEを返す場合IsWow64Processは、64ビットOS上の32ビットアプリケーションであることを意味します。

これは、フォルダ内の名前が示唆しているものとは逆であり、これが混乱を招くように思われる理由である可能性があります。基本的に、SysWow64フォルダはWoW64で使用する32ビットバージョンであり、「Windows64ビット上のWindows32ビット」です。基本的に、32ビットを実行する場合はWoW64 DLLを使用し、64ビットを実行する場合は通常のDLLを使用します。

于 2012-10-23T17:39:39.827 に答える
3

を押しCtrl-Shitf-Escて、タスク マネージャー アプリケーションを実行します。[プロセス] タブには*32、すべての 32 ビット プロセスの名前のラベルが表示されます。これは、プロセスのビット数をチェックする最も簡単な方法の 1 つです。

于 2012-10-23T17:43:32.593 に答える