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関数の実装が可能になります。

unicows1
その方法とは、単に、構成プロパティのリンカ、追加依存ファイルに 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

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です