Windows 98/Me 対応のUnicode アプリケーションの作り方
Windows 2000が出た当初は プログラムをUnicode 対応アプリケーションにした場合、Unicode対応版と非対応版の2つを作成する必要があり、非常に厄介な問題でした。
今も、notepad ++ などは Unicode 対応版と Ansi版の2種類があったりします。
例えば、次のようなコードを書いた場合
#include "stdafx.h" #include <windows.h> int _tmain(int argc, _TCHAR* argv[]) { wchar_t str[640]; *str=0; GetModuleFileNameW(0,str,640); wprintf(L"%s\n",str); return 0; } |
Windows 2000/XPなどでは 自分自身の実行ファイルの名前が返りますが、Windows 98/Meでは何も出力されないことになります。
ところが、Microsoft Layer for Unicode Systems を実装することで、Windows 98/MeでもUnicode関数の実装が可能になります。
その方法とは、単に、構成プロパティのリンカ、追加依存ファイルに unicows.lib を追加し、 実行先の、Windows 98/Me に unicows.dllが存在すればよいのです。
[2010/2/1追記]
更に、-NODEF(デフォルトライブラリを含まない) 設定にするか -MT オプションにして、Runtimeを含まない設定にする必要があります。
なぜならば、MSVCR80.DLLなどは、unicows.dllを介さずに直接 kernel32.dllなどを呼んでしまうからです。
Unicows.dllは再頒布可能な MLUW SDKに含まれているので、簡単に入手が可能です。
Unicows.libは Windows 2003 SDK などに同梱されています。
関連サイト:
The Microsoft Layer for Unicode on Windows 95/98/Me Systems
Download details: Platform Software Development Kit Redistributable: Microsoft Layer for Unicode on Windows 95, 98, and Me Systems, 1.1.3790.0
Comments