编写一个函数,在使用 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;
}
我想编写一个将 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;
}