更正此错误:GetLastError 0x13d



在此示例中,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%xn", GetLastError());
    return;
}

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)释放分配的内存。

首先,当您说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%xn", 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%xn", 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: %pn",&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:  %pn",&buffer);
// if i do it the right way:
char* p_buffer;
alloc(&p_buffer,128);
printf("Address of buffer after:  %pn",p_buffer);

return 0;
}

尝试更改变量的地址是没有意义的。这可能就是您的代码不起作用的原因。

相关内容

  • 没有找到相关文章

最新更新