2009-05-21 7 views
2

私は奇妙な問題に直面しています。私はsprintfまたはswprintfを使用してビルドの定義に応じて、またはunicodeなしで定義しています。私はこのように私自身の機能でこれらの機能をラップしています別のlibからswprintを呼び出すと失敗します

int mysprintf(MCHAR* str,size_t size, const MCHAR* format, ...) 
{ 
#ifdef MYUNICODE 
    return swprintf(str, size, format); 
#else 
    return snprintf(str, format); 
#endif 
} 

これらの機能は、別のプロジェクトであるとlibとしてコンパイルされたStringクラスです。私は別のプログラムでそれを使用します。私はmysprintf()

msprintf(str,10, _M("%d,%d"),height,width); 

を使用している場合今私は、文字列バッファ内のいくつかのゴミの値を取得します。しかし、プログラムから直接swprintf関数を呼び出すと、罰金がかかります。ビルドでUNICODEを定義し、関数swprintfが呼び出されますが、いくつかのガベージ値が入ります。私は間違っていることを理解していない。

おかげ アミット

答えて

1

実際には、さまざまなパラメータを持つ独自の関数があるという問題があります。あなたは引数のリストへのポインタを取得し、それを呼び出し先に渡す必要があります。 va_startを使用すると、それを行うことができます。関数の引数リストの最後のポインタが必要です。

int mysprintf(MCHAR* str, size_t size, const MCHAR* format, ...) 
    { 
     va_list args; 
     va_start(args, format); 

     int result; 

    #ifdef MYUNICODE 
     result = vswprintf(str, size, format, args); 
    #else 
     result = .. 
    #endif 

     va_end(args); 

     return result; 
    } 

乾杯!

+0

マグヌスありがとう、これがコンセプトをクリアしました。 – amit

+0

いつでも相手: – ralphtheninja

+0

swprintf()はva_listを取っていませんが、vswprintf()は受け取りません。 – bk1e

1

あなたはそれが含まれているprrintf機能にmysprintf機能から...パラメータを渡す必要があります。これを行うには、関数のvprintf()ファミリを使用する必要があります。詳細はhttp://msdn.microsoft.com/en-us/library/0zf95wk0%28VS.71%29.aspxを参照してください。

関連する問題