在此示例中,dwerror为10045L
。但此代码返回0x13d值作为错误。
如何获取格式信息?请查看。
TCHAR lpMsgBuf[512];
if(!FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
dwError,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf,
0, NULL ))
{
wprintf(L"Format message failed with 0x%x\n", GetLastError());
return;
}
答案 0 :(得分:1)
首先,当您说FORMAT_MESSAGE_ALLOCATE_BUFFER时,您不需要分配多个指针。然后在lpBuffer中传递指向该指针的指针。所以试试这个:
TCHAR* lpMsgBuf;
if(!FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
dwError,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf,
0, NULL ))
{
wprintf(L"Format message failed with 0x%x\n", GetLastError());
return;
}
不要忘记拨打LocalFree
或者您自己分配缓冲区:
TCHAR lpMsgBuf[512];
if(!FormatMessage(
FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
dwError,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) lpMsgBuf,
512, NULL ))
{
wprintf(L"Format message failed with 0x%x\n", GetLastError());
return;
}
另外,试试这个:
#include <cstdio>
#include <cstdlib>
int alloc(char** pbuff,unsigned int n)
{
*pbuff=(char*)malloc(n*sizeof(char));
}
int main()
{
char buffer[512];
printf("Address of buffer before: %p\n",&buffer);
// GCC sais: "cannot convert char (*)[512] to char** ... "
// alloc(&buffer,128);
// if i try to cast:
alloc((char**)&buffer,128);
printf("Address of buffer after: %p\n",&buffer);
// if i do it the right way:
char* p_buffer;
alloc(&p_buffer,128);
printf("Address of buffer after: %p\n",p_buffer);
return 0;
}
尝试更改变量的地址没有意义。这可能是你的代码不起作用的原因。
答案 1 :(得分:1)
0x13d == 317 == ERROR_MR_MID_NOT_FOUND
。
SYSTEM中不存在您尝试查找的错误消息。
也许您的错误源自特定的 dll 或驱动程序。
如果您知道哪个dll \驱动程序尝试获取它并指定FORMAT_MESSAGE_FROM_HMODULE
而不是FORMAT_MESSAGE_FROM_SYSTEM
并在FormatMessage
调用中提供句柄作为源。
除此之外,如果您使用FORMAT_MESSAGE_ALLOCATE_BUFFER
,则应声明LPTSTR
类型的变量,例如LPTSTR pMsg;
,并将其作为 (LPTSTR)&pMsg
传递给FormatMessage当你完成它时,使用LocalFree(pMsg)
释放分配的内存。