*x64のWindowsを扱う上で知っておくべき事 [#f5b4d7d7]
#contents

** x86・x64OSでの32bit、64bitアプリケーションの動作 [#ree2d6a3]
** x86・x64 Windowsでの32bit、64bitアプリケーションの動作 [#ree2d6a3]
- 32bitWindows
-- 32bitのアプリケーションしか実行出来ない
- 64bitWindows
-- 32、64bitのアプリケーションを実行出来る
-- 32bitのアプリケーションはWOW64と言うエミュレーションレイヤ上で実行される
-- 32bitのアプリケーションはWOW64(Windows-On-Windows64)と言うエミュレーションレイヤ上で実行される

** x64 Windowsにおける、32bit、64bitのDLLの関係 [#q327c703]
- 32bitのアプリケーションから64bitのDLLは使用出来ない
- 同様に、64bitのアプリケーションから32bitのDLLは使用出来ない
- 例えば、プラグインを扱える32bitのアプリケーションが64bitに対応した場合
-- 今まで使用されていた32bitのプラグインは使用出来ないので、64bitに対応するのを待つ必要がある
-- 逆に、プラグインが64bitに対応しても、それを扱うソフトが32bitのままでは使用出来ない
-- ソフトが64bitに対応しないと、プラグイン作者もどうしようもないと言う事

** System32とSysWOW64 [#if46f764]

- 32bit Windowsの場合、システムで使用するDLL等は基本的にSystem32に入っている
- 64bit Windowsの場合はどうか?
-- System64と言うディレクトリは存在せず、''System32に64bit版のDLL''が入っている

- 32bit版のDLLはどうする?
-- 32bitのアプリケーションが動作し、System32を参照した場合、SysWOW64にリダイレクトされるようになっている
-- つまり、32bit版のDLLは、SysWOW64に入っている
-
- 32と名称が付くと混乱する名称変えなかったのはなぜ?
-- 開発者は32bit版と64bit版をコンパイルする場合、通常はコンパイルオプションを
変更することで対応する
-- 32bit版と64bit版のソースコードを二重管理するのは面倒だし、バグを発生させるから
-- コンパイルする際にはSystem32のいくつかのDLLを参照している32、64によってリンク先を変えると混乱するため、名称はそのままにしている
-- kernel32.dllなども、名称は32になっているが、x64版に入っているのは64bit版