所以我正在开发一个 Windows 应用程序,我决定编写几个辅助函数来检查任何与 com 相关的函数在调用时返回的 HRESULT。我正在尝试将这些函数定义为宏#define 块,但我真的不确定什么是正确的语法。这是#define 块中的两个函数,当我的程序的其他部分调用它时,第二个函数会给出编译器错误。
#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,则抛出错误。第二个尝试将错误代码转换为人类可读的字符串并返回。这是我得到的错误(我使用的 ide 是 qt creator,但这没关系):
它说 _com_error 被非法使用,我认为其他错误是由#define 块中的错误语法引起的。有人可以指出我的语法有什么问题吗?