Windows APIを使った、Unicodeの正規化はNormalizeStringというAPIが用意されている…とありますが、以前mkIIのほうで書いたとおり、どうも使っていいんだかよくわかりません。少なくともstatic linkでやると、「normalization.dllがロードできません」と言われます。
じゃあということで、normaliz.dllをdynamic linkしてみると、「ESP(スタックポインタ)が呼び出し前後で違うよ!」と怒られます。Vista SP1ではkernel32.dllへforwardしているだけのようですが、実は引数がもっとどっさりあるんでしょうか。英語版のconnectにも書いたことがあるんですが、伝わらなかったのか、速攻でcloseされてしまいました(;_;)。
ちょっとあきらめきれなくて、もう少し調べてみると、LPMapString/LCMapStringEx(ただし、LCMapStringExはWindows Vista/Windows Server 2008のみ)を使えば、結合文字などを正規化してはくれるようです。ただし、NormalizationCとかの指定ではないので、Unicodeの正規化ルールにのっとっているわけではありません。昔も同じようなこと書いてた…こっちはソートだけど。
ref id:kkamegawa:20070927:p3 (Sort keys in Japanese)