0

我想编写一个函数,它将 error_code 作为参数并获取错误消息并返回消息。但是对于 FormatMessage,分配的内存是通过使用 LocalFree(err_msg) 清除的。不知道这怎么能不随着返回。

static char* return_message(int error_code) {
   LPTSTR err_msg;
   FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM |
            FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_MAX_WIDTH_MASK,
            0, error_code, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
            (LPTSTR)&err_msg, 0, 0);
  return err_msg;

我想要一个类似于上面的方法。虽然在上述情况下,如果我们返回 err_msg 它超出了范围。谁能为此提供适当的功能?

4

1 回答 1

2

看到您正在使用 C++,您可以将生成的消息复制到一个std::string实例中,释放 C 字符串并返回副本。std::string的析构函数将在不再使用时处理释放。

#include <string>
#include <windows.h>

static std::string return_message(int error_code) {
   char* tmp_msg;
   FormatMessageA( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM |
            FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_MAX_WIDTH_MASK,
            0, error_code, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
            (LPSTR)&tmp_msg, 0, 0);

   std::string err_msg(tmp_msg);
   LocalFree(tmp_msg);
   return err_msg;
}
于 2021-02-16T11:30:36.557 回答