だから私はWindowsアプリケーションに取り組んでおり、com関連の関数が呼び出されたときに返されるHRESULTをチェックするために、いくつかのヘルパー関数を書くことにしました。これらの関数をマクロ #define ブロックに定義しようとしていますが、適切な構文が何かわかりません。#define ブロックの 2 つの関数を次に示します。2 つ目の関数は、プログラムの他の部分で呼び出すとコンパイラ エラーが発生します。
#ifndef COMUTILITIES
#define COMUTILITIES
#include <sstream>
#include <fstream>
#include <string>
#include <comdef.h>
#include <AtlConv.h>
#define COM_RESULT_CHECK( ret ) \
if ( ret != S_OK ) { \
std::stringstream ss; \
ss << "failed " #ret " " << std::hex << ret << std::endl; \
throw std::runtime_error( ss.str().c_str() ); \
}
#define TO_STRING( ret ) \
_com_error err(ret); \
LPCTSTR errMsg = err.ErrorMessage(); \
std::string s = CT2A( errMsg ); \
return s; \
#endif // COMUTILITIES
基本的に私の目標は単純です。最初の関数は、com 関数の戻りコードをチェックします。S_OK でない場合は、エラーがスローされます。2 つ目は、エラー コードを人間が読める文字列に変換して返そうとします。これが私が得たエラーです(私が使用しているideはqtクリエーターですが、それは問題ではありません):
_com_error が不正に使用されていると書かれており、他のエラーは #define ブロックの不適切な構文が原因であると思われます。誰かが私の構文の何が問題なのか指摘できますか?