Visual C++ 7.0覚書
趣味のプログラミングも年とともに記憶の限界に
ここでは、.NetのVC++7を想定しています。
■Unicodeの使用
プログラムコードをUnicodeに書き換える利点は、実はあまりありません。特にマルチ言語をサポートしようと思うとその苦労は並大抵のものではありません。とりえといえば一文字2バイトであり、0x5c("\")を気にしなくてよいところです。ただし、Unicodeがサポートされているのは、WinNT4.0以降です。それ以前のOSでは、unicow.dllを使用してサポートできます。
MSも必ずしもUnicodeを強制していません。移植しやすいことが大事なようです。
テキストは、char->_TCHARに変更、”XXX"は、_T("XXX")に変更。これでUnicodeとMBCSの行き来ができます。
関数は、全てMBCSとUnicode両方がコンパイラオプションで使用できます。strcpy -> __tcscpy
文字列を扱うならオーバーヘッドは無視してCStringを使用するとより見通しがいいと思います。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vclib/html/_crt_string_manipulation.asp
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/netstart/html/sdkstart.aspINCLUDE:
これらのリンクはいつまでも当てになりませんのでご注意。
次に多くのUnicode関連の関数は、WindowsNT4.0以降に多く、特にWin95では、Unicodeの変換ルーチン
MultiByteToWideChar()もありません。そこで、Unicow.dllなるDLLをおいて呼び出すとWin95ですらUnicodeが使用で起案す。
Microsoft Layer for Unicode on Windows 95/98/Me Systems
#ifdef _UNICODE
HANDLE m_hUnicowDll = LoadLibrary(_T("unicows.dll"));
if (!m_hUnicowDll)
{
str.LoadString(m_hInstance,IDS_NO_UNICOWSDLL);
AfxMessageBox(str);
return FALSE;
}
#endif
■oleacc.dllの変
VC++7になってから、出来上がったプログラムを実行すると、oleacc.dllがないといってきて途方にくれたことはありませんでしょうか?そう、これからはアクセサビリティーの観点から必須のようです。NTではSP6を導入することで解決しますが、Win95日本語版では、このDLLを提供する予定はないようです。
プログラマの皆さん、MSの切り捨てではありますが、ほかのバージョンから持ってこさせるような姑息な手段はとらせないでください。動きませんよ。
まず、「こんなDLL使った記憶がない。」ことに気が付けば対策はあるところにはあるものです。
リンカオプションの「DLLの遅延読み込み」にこのoleacc.dllを記述してください。これだけだとリンカでエラーが出ます。
遅延ロードのヘルパー関数delayimp.libをライブラリーに加えてください。これで、このDLLは必要とされるときだけ探しに行きます。すなわち本当にaccessibilityのAPIを呼び出すまでは探しに行きません。
このヒントは、www.codeproject.comからもらいました。
|