Microsoftから
x64版
Windows XPがリリースされたことに伴い、
x64版
Windowsのサポート技術文書もいくつか公開されています。ユーザが日常使おうとすると、とたんに困るであろうところとなると
では、開発者は何に気をつければいいでしょう?ポインタのサイズなどのプログラムから見えやすいところ以外の、
Windowsのシステムに関わるようなところです。たとえば、16bitから32bitになって、システムファイルが入る場所が%WINDIR%\systemから%WINDIR%\system32になったというたぐいの変更です。
Microsoftのサポート技術文書
64 ビット版の Windows Server 2003 と Windows XP での 32 ビット プログラムの互換性についてにまとめられています。ドライバや単独のアプリケーション、
レジストリはわかりやすいところですが、興味深いのは以下の二点。
- MMC(管理コンソール)から32bit版のMMCスナップインを動かす場合
- .NET Framework 2.0でコンパイルされたコードをx64で動かして、その中から32bit版のマネージドDLLをP/Invokeで呼び出した場合。COM経由の呼び出しも同じかな。
前者に関しては前述のサポート技術情報
896456のリンクに
Running 32-bit and 64-bit Snap-ins in 64-bit Windowsとして載っています。起動するときに"mmc -32"というオプションをつければ32bitモードのスナップインが動作して、"mmc -64"と起動すると、64bitのスナップインが使用できるそうです。なので、メニューなんかに登録するときは"mmc -32 hogehoge.
msc"って登録すればよいようです。って、32bit版のmmcスナップインを登録するときは自動的にやってくれないの?
問題は次の
.NET Framework 2.0マネージドコードを動かした場合(ただし、P/Invokeで32bitコード呼び出しがあり)。試してみたいけれど、うちには
x64のシステムがないorz。P/Invokeで32bitコードを呼び出した瞬間に例外が出るのかなぁ…。私が.NET使ってもP/Invokeが必要なアプリケーションばかり書くから、興味あるところです。