*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版