#22258
Yutaka Emura
キーマスター

redakt55 様

いつもお世話になっております。江村です。

こちらでも再現しました。調べたところ、Windows API の lstrcmpi 関数、CompareString 関数に原因があることがわかりました。

記録のために書いておくと、

lstrcmp( L"㆑", L"" )

を実行すると、片方が空の文字列で、2 つの文字列が異なるため、0 以外の値が戻り値になるはずですが、0 を返しています。

lstrcmp( L"㆐", L"" )

lstrcmp( L"あい", L"㆐あ㆑い" );

なども、0 を返してしまいます。どうやら比較の前に、L”㆑” と L”㆐” は、空の文字列と同じとみなされているようです。

CompareString( LOCALE_INVARIANT, 0, L"㆑", -1, L"", -1 )

としても同様に CSTR_EQUAL を返しました。

そこで、代わりに wcscmp を使用すれば問題はなくなるのですが、Windows 内部で lstrcmp (または CompareString) が使われているためか、それだけでは完全に修正できませんでした。一度ツールチップを破壊してから、再作成すればいいかもしれませんが、パフォーマンスに影響を与える可能性があるため行っていません。将来のバージョンでは、別の方法で修正を検討します。

よろしくお願い申し上げます。