2012-10-23 17 views
10

Visual Studio 2010(Windows 7 64ビット版)で64ビットC++プロジェクトを作成しました。64ビットvC++プログラムが32ビットモードで動作するようです。

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

もっと...

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

が、私は機能IsWow64Processを呼び出した場合、それは FALSEを返さ奇妙なもの:

  • LoadLibrary()の下にdllをロードするも
  • c:\windows\sysWow64\some.dllの下にDLLをロードする働き(エラーコード193:some.dllは有効なWin32アプリケーションではありません)失敗します

すべてのこれらの障害は、アプリケーションが32ビットモード、 で実行されているが、これはお勧め真実に対してポインタのタイプは8バイトの長さです

私は混乱しています、どんな助けもありがとう!

答えて

11

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

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

System32フォルダは、64ビットバージョンのDLLの、及びSysWow64フォルダが32ビットバージョンが含まを含有します。 IsWow64ProcessがTRUEを返すと、あなたが64ビットOS上の32ビットアプリケーションであることを意味します。

これは、フォルダ内の名前が示唆しているものとは逆です。なぜこれが混乱しているようですか。基本的にSysWow64フォルダは、WoW64の32ビット版です.Windows 64ビット版のWindows 32ビット版です。基本的には、3238を実行するとWoW64 DLL を使用し、通常のDLLは実行時に使用します64bit。

+0

+1 OPが説明するすべてのものは、64ビットOS上の64ビットアプリケーションと100%一致しています。 –

+0

@DavidSchwartzうわー - WoW64を使用すると32bitが走っているので、人々は混乱してしまいます。これは、名前が与えられたとは逆です;) –

+0

ニースの答え。 WoW64とsystem32の違いを理解すると、しばらく前から頭がおかしくなりました。 – nothrow

3

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

関連する問題