いろきゅうの(元)はてなダイアリー

はてなダイアリーから移行中…

strsafe.h の問題

<<前日からの続き>>
strsafe.h を inlcude すると、既存の文字列関数 strcpy やら lstrcpy、sprintf などの利用が制限されてしまいます。
いやまあ、strsafe.h を inlcude した以上、そこlで定義された新しい関数を使えば問題は解決するんですが…… そうもいってられず。^^;

私は、自前ライブラリを一般公開しようかと思っているところです。おそらく初出は、3月21日に開催される、24hコミケの時でしょう。(と、CMしときます:ぉ)


で、仮に strsafe.h を include せずに、出荷したとしましょう。 で、他の誰かが strsafe.h と共に利用を開始しした場合、ビルドが通らなくなります。 自分のライブラリ内で snprintf とか使っている為ですね。
逆に、strsafe.h を include した状態で公開を開始したとしましょう。…「sprintfが使えないんじゃ!ボケェ!」と苦情の嵐になる事間違いなし!(笑)  まだ、新しい関数群は浸透してませんからねぇ。
「StringCchPrintf 関数使ってくれ」 リファレンスに書いたとしても、馴染みのある関数を利用不可にされたライブラリなんざ、誰も使わないでしょう。
>ただでさえ使われないのに ^^;


で、仕方ないので、次のようにしました。

自分のライブラリで使う文字列操作関数は、新しく導入された StringCchPrintf などで構築しておく。
で、共有ヘッダーに、次のように書いておきました。(一部抜粋)

// CchCat が定義されてなかったら、既存の関数へ置換え
#ifndef StringCchCat
#define StringCchCat(dest, nSize, src)    *1
#endif // StringCchCat

// CchPrintf が定義されてなかったら、既存の関数へ置換え
#ifndef
StringCchPrintf
#define StringCchPrintf       _sntprintf
#endif // StringCchPrintf


これぞ、本末転倒!

*1:_tcscat(dest, src), S_OK