Home

VC++と使うには

BorlandC++と使う

TextPadの特徴

編集

正規表現

ドキュメントクラス

漢字コード変換

TextPad 4.6
パッチ

DDWinと使う

VC++7覚書

TextPadフォーラム

自己紹介など

e-Mail

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からもらいました。