特集
» 2005年06月15日 00時00分 公開

時代に遅れないためのWin64用アプリケーション開発64ビットコンピューティング最前線(3/3 ページ)

[C MAGAZINE]
前のページへ 1|2|3       

32ビットとの互換性(WOW64)

 Win64では、64ビットWindowsにネイティブで対応するアプリケーションのほか、Win32エミュレーションレイヤによって、従来の32ビットアプリケーションも実行させることができます。これを可能にしているのが「WOW64(Windows On Windows 64)」です。

 WOW64はWin64の一部として実装されており、環境変数などもそれぞれのバージョンが用意されています。ただし、WOW64で対応するのはWin32アプリケーションのみで、Windows 3.1以前のWin16アプリケーションは動作させることができません。ですから、Win16のコードで書かれている一部のインストーラなどは実行できないことになります。

 また、64ビットプラットホームでのデバイスドライバについて、こちらは64ビットで書かれていなければなりません(Table13)。

Table13
Windowsシステムとアプリケーションおよびドライバの関係
Windowsシステム 32ビット版 64ビット版
アプリケーション 32ビットのみ 64ビットと32ビットのどちらでも実行可能
※ただし、ダイナミックモジュールのロードはそのビット幅を越えられない。つまり64ビットのDLLは64ビットアプリケーションからしかロードできず、32ビットのDLLは32ビットアプリケーションからしかロードできない
ドライバ 32ビットのみ 64ビットのみ

 64ビットハードウェアは多くの32ビットアプリケーションと互換性がありますが、今のところ32ビットアプリケーションは、やはり32ビットハードウェア上で動作させるほうが若干スムーズに実行できることが多いようです(ただしx64システムでは、32ビットアプリケーションもネイティブで実行可能です)。とはいえ、64ビット環境で旧来の32ビット資産を生かせるというのはとてもありがたいことです。

32ビットと64ビットの共存のポイント

 今後しばらくの間は、32ビットWindowsと64ビットWindowsアプリケーションは、それぞれが共存していくことになるでしょう。そうした状況において、両者の互換性を保つアプリケーションを開発するためにWindowsプログラマが心がけるべき点は、次のとおりです。

  • ポインタをint、long、ULONG、DWORDなどにキャストしてはならない
  • ポインタの型変換には、PtrToLongやPtrToUlong関数を使うこと
  • Win64はLLP64のプログラミングデータモデルなので、引数によってポインタを得るような関数には注意する
  • ポリモーフィックAPIに注意する
  • 新しいWindowクラス関数および定義を使う
  • size_t、HANDLE、LPARAM、WPARAM、LRESULTなど派生タイプのデータ型はプラットホームによってサイズが変わることに注意

 Part 3で説明した64ビットプログラミングの一般的な注意点とこれらの点に気をつければ、32ビット環境も考慮した64ビットWindows対応アプリケーションの開発はだいぶ楽に行うことができるはずです。

 将来もC/C++プログラミング言語を用いてWindowsアプリケーションを開発していこうと考えているプログラマにとって、このあたりはしっかりと押さえておきたいポイントです。

前のページへ 1|2|3       

Copyright(C) 2010 SOFTBANK Creative Inc. All Right Reserved.

注目のテーマ