sprintfはプラットフォームによって提供されるAPIです。私はそれが使用されるときいくつかの形式をフィルタリングしたい。私の考えは:sprintfが呼び出されるたびにmy_functionを呼び出す方法は?
これらのコードをpchに入れてください。
しかし、私はまだそれがすべての用途をカバーすることができないと心配しています。あるものは事前ビルドされたライブラリにあり、すべてのプロジェクトがpchを持っているわけではありません。あなたは他の考えを持っていますか?
ありがとうございました。それは窓の上にある。あなたがいるない標準ライブラリの関数と同じ名前の関数/マクロを定義することができ:
int my_sprintf(char *buffer, char *fmt, ...)
{
int ret;
va_list args;
va_start(args, fmt);
/* insert your filter here */
/* you CAN NOT re-use a va_list variable after being used */
ret = vsprintf(buffer, fmt, args);
va_end(args);
return ret;
}
注:
を呼び出すよりも、同じ名前
で関数を定義するために名前空間に概念を使用することができますそれを行うには、それでもあなたはすべてのケースをカバーすることはありませんが、代わりにワームの缶を開きます。だから問題は、これで実際に何を達成したいのですか?何を正確にフィルタリングしたいのですが、なぜですか?おそらく、あなたが望むものを達成するためのより良い方法があります。 – CherryDT
理論的には、プラットフォームのバージョンを動的にロードし、すべての呼び出しを転送するためにGetProcAddressを呼び出すCRT dllの独自のバージョンを記述することができます。その後、上記のようにカスタムsprintfを変更するだけです。その後、マイクロソフトではなくカスタムCRTにプログラムをリンクします。そして、プログラムがすべての種類の予期せぬものを実行し、おそらくクラッシュして、なぜあなたが悩んでいるのか疑問に思うままに戻って座って見てください。 –
stdoutをカスタム出力にリダイレクトFILE –