2016-06-13 21 views
0

エラーを記録する従来のWindowsアプリケーションがあります。どのような種類のエラーがスローされたのかを知ることは素晴らしいことですが、プロジェクトのソースコードを見つけた後、これはC++であり、C++の経験はほとんどありません。DWORDとLPCTSTRの連結

エラーコードはDWORDで、ログ関数への入力はLPCTSTRです。

コードは今、次のとおりです。

DWORD dwError; 
dwError = SomeFunction(); 

if (dwError) 
{ 
    Log(_T("Something failed")); 
} 

は、だから私は、ログメッセージに入れdwErrorの価値を持っていると思います。 C#の背景から私はLog(_T("Something failed (" + dwError + ")"));を試しましたが、明らかにうまくいきませんでした。

また、LPCTSTRの値を連結して読んでみました。私はいくつかのヒットを見つけましたが、彼らは非常に複雑に見えます。そして、私はこのレガシーコードのために何かに混ぜる方法を知らない。

dwErrorをログメッセージの一部にするにはどうすればよいでしょうか。好ましくは16進表記です。

+0

このようなメッセージは、プログラムの多くの場所で必要になる場合があります。あなたはvar関数を受け入れるようにLog関数を拡張することを考えます: 'Log(PTCHAR szMesage、...);'これを 'vstprintf'で一度実装します(http://www.cplusplus.com/reference/cstdio/vsprintf/ )。現在のケースの関数を 'Log(_T("何か失敗しました:%u ")、dwError);' – harper

答えて

3

質問にはC++が付いていますが、コードはあり、質問はCスタイルで書かれています。

C++の場合は、std::basic_stringを使用してください。

DWORD dwError; 
dwError = SomeFunction(); 

if (dwError) 
{ 
    std::basic_string<TCHAR> msg(_T("Something failed: ")); 
    msg += std::to_string(dwError); 
    Log(msg.c_str()); 
} 

さらにCスタイルになります。

DWORD dwError; 
dwError = SomeFunction(); 

if (dwError) 
{ 
    TCHAR buffer[1024] = {}; 
    _stprintf(buffer, _T("Something failed: %u"), dwError); 
    Log(buffer); 
} 

format specifiersからsprintfリンクのドキュメント、およびHEXのために、それは、%Xだろう。

_stprintf(buffer, _T("Something failed: %X"), dwError);