热情软件屋

 

如何知道GetLastError()返回的错误信息


编号:QA003338
建立日期: 2000年9月21日 最后修改日期:2000年11月15日
所属类别:

liuyx:
    操作系统: nt
    编程工具: c++builder
    问题: 在利用READFILE直接读硬盘时发生错误,GetLastError()返回87,我不知道是什么原因及如何得到详细的错误信息?
    水平: 刚入门

回答:

    你可以在winerror.h中找到错误码的符号定义,从中可以知道错误的大体含义。也可以使用FormatMessage得到该错误对应的字符串。下面的文章摘自“北京理工大学BBS”:
    发信人: ZhiShao (De macau), 信区: C
    标 题: 错误处理
    发信站: 京工飞鸿 (Tue Nov 14 13:39:07 2000), 转信
    
    在VC中编写应用程序时,经常需要涉及到错误处理问题。许多函数调用只用TRUE和FALSE来表明函数的运行结果。一旦出现错误,MSDN中往往会指出请用GetLastError()函数来获得错误原因。
    可问题是,GetLastError()返回的只是一个双字节数值(DWORD)。OH,MY GOD!目前Win32的出错编号已经从0排到11031,而这还不是错误编码的全部。因为错误代码还在不断增加。
    我想没有人愿意自己去查出错编码所对应的错误信息。好在Windows(Windows95以上, Window NT 3.1以上)已经提供了现成的错误信息处理函数:FormatMessage()。 以下是用FormatMessage()得到由GetLastError()返回的出错编码所对应错误信息的示例:
    LPVOID lpMsgBuf;
    FormatMessage(
     FORMAT_MESSAGE_ALLOCATE_BUFFER |
     FORMAT_MESSAGE_FROM_SYSTEM |
     FORMAT_MESSAGE_IGNORE_INSERTS,
     NULL,
     GetLastError(),
     MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
     (LPTSTR) &lpMsgBuf,
     0,
     NULL
    );
    
    // Process any inserts in lpMsgBuf.
    // ...
    
    // Display the string.
    MessageBox( NULL, (LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION );
    
    // Free the buffer.
    LocalFree( lpMsgBuf );
    不过有一点比较可笑,“该函数调用如果出错,将返回0值,需要获取错误信息,请调用GetLastError()”。

此问题由李海回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio