我正在尝试将最后一条消息从WinApi打印到控制台。听起来很简单,至少我是这么想的。我做了一个足够简单的函数,但是我得到了一个错误代码8 (ERROR_NOT_ENOUGH_MEMORY)。我不知道这是怎么回事我也没在网上找到任何东西。我要说的是:
static inline void printLastMessage()
{
LPTSTR lpMsgBuf;
if(FormatMessage((FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS), NULL,
GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), lpMsgBuf, 0, NULL) == 0)
{
printf("Error Code: %d\n", GetLastError());
}
wprintf(L"Error: %s\n", lpMsgBuf);
LocalFree(lpMsgBuf);
}
结果缓冲区在控制台中如下所示:
Error: (null)
我也尝试过FormatMessageW,但这并没有什么不同。( FormatMessage似乎被定义为带有UNICODE的FormatMessageW )
我使用MinGW的GCC与C11,WindowsSDK10.0.22621。
编辑:更新(LPTSTR)&lpMsgBuf。当前代码:
static inline void printLastMessage()
{
LPTSTR lpMsgBuf;
DWORD err = GetLastError();
printf("Error code: %d\n", err);
if(FormatMessage((FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS), NULL,
err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&lpMsgBuf, 0, NULL) == 0)
{
printf("Error Code (FormatMessage): %d\n", GetLastError());
}
wprintf(L"Error: %s\n", lpMsgBuf);
LocalFree(lpMsgBuf);
}
和产出:
Error code: 87
Error:
发布于 2022-10-22 19:18:04
事实证明,这是一个编译器问题。将MinGW从https://www.mingw-w64.org/转换到https://winlibs.com/的版本使相同的代码运行得很好.
发布于 2022-10-22 07:40:12
我使用MinGW的GCC与C11,WindowsSDK10.0.22621。
那也太没道理了。MinGW附带了自己的Win32 API库。你不应该把它和Windows混为一谈。这可能导致行为不明确。
完全使用MinGW构建代码,远离Windows,或者在Windows中使用MSVC。
我用https://winlibs.com/的MinGW-w64尝试了您的代码,没有问题。下面是我如何将您的代码变成一个独立的程序test.cc
#include <windows.h>
#include <stdio.h>
static inline void printLastMessage()
{
LPTSTR lpMsgBuf;
DWORD err = GetLastError();
printf("Error code: %d\n", err);
if(FormatMessage((FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS), NULL,
err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&lpMsgBuf, 0, NULL) == 0)
{
printf("Error Code (FormatMessage): %d\n", GetLastError());
}
wprintf(L"Error: %s\n", lpMsgBuf);
LocalFree(lpMsgBuf);
}
int main ()
{
printLastMessage();
return 0;
}
然后我构建了这样的代码:
g++ test.cc
在运行生成的a.exe
之后,我得到:
Error code: 126
Error: The specified module could not be found.
因此,看起来您的代码正在工作,您只需要在纯MinGW/MinGW-w64中构建它。
https://stackoverflow.com/questions/74160509
复制相似问题