编写一个函数,在使用 FormatMessage 获取消息后将 return 字符串

Write a function that will return string after fetching message using FormatMessage

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

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;

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

由于您使用的是 C++,因此您可以将生成的消息复制到 std::string 实例中,释放 C 字符串并 return 复制。 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;
}