与C ++标准库中的GetLastError相同的boost :: system :: error_code是什么?

时间:2015-06-09 12:11:21

标签: c++ c++11 boost stl

在我的应用程序中,我们尝试删除boost功能并替换为C ++标准库功能。这里我有一个从getLastError编写的boost :: system :: error_code,并从一个地方抛出。并通过准备错误字符串在另一个地方处理。

void fun()
{
    boost::system::error_code ec(GetLastError(), boost::system::system_category()); 
    throw ec;
}
int main()
{
    try
    {
        fun();
    }
    catch ( boost::system::error_code ec )
    {
        if (ec == boost::asio::error::operation_aborted)
          string strError(ec.message();
    }
}

我发现我可以用std :: error_code替换它。但是当我尝试使用示例程序时,我无法获得相同的字符串。我尝试了所有三类std :: error_code。我需要一个替换,它提供完全相同的字符串。

//Returns the last Win32 error, in string format. Returns an empty string if there is no error.
std::string GetLastErrorAsString()
{
    //Get the error message, if any.
    DWORD errorMessageID = ::GetLastError();

    LPSTR messageBuffer = nullptr;
    size_t size = FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
        NULL, errorMessageID, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&messageBuffer, 0, NULL);

    std::string message(messageBuffer, size - 3);  // Getting rid of trailing characters: ".\r\n"

    //Free the buffer.
    LocalFree(messageBuffer);

    return message;
}
int _tmain(int argc, _TCHAR* argv[])
{

    SetLastError(ERROR_OPERATION_ABORTED);

    std::error_code er(GetLastError(), std::generic_category());
    cout << "STD  Generic Error: " << er.message() << endl;

    std::error_code sysEr(GetLastError(), std::system_category());
    cout << "STD  System  Error: " << sysEr.message() << endl;

    std::error_code ioEr(GetLastError(), std::iostream_category());
    cout << "STD  I/O     Error: " << ioEr.message() << endl;

    cout << "STL          Error: " << GetLastErrorAsString() << endl;

    boost::system::error_code ec(GetLastError(), boost::system::system_category());
    cout << "Boost        Error: " << ec.message() << endl;
}

输出:

STD Generic Error:未知错误

STD系统错误:操作已取消

STD I / O错误:未知错误

STL错误:由于线程退出或应用程序请求,I / O操作已中止

Boost Error:由于线程退出或应用程序请求,I / O操作已中止

0 个答案:

没有答案