SetLastError GetLastError FormatMessage

SetLastError

GetLastError   

FormatMessage功能就是将GetLastError得到的错误信息(这个错误信息是数字代号)转化成字符串信息的函数

var
  nErrorNo: DWord;
  sBuffer: String;
begin
  nErrorNo:= GetLastError(); // 得到错误代码
  FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER
                    or FORMAT_MESSAGE_IGNORE_INSERTS
                    or FORMAT_MESSAGE_FROM_SYSTEM,
                  nil,
                  nErrorNo,
                  LANG_NEUTRAL,
                  @sBuffer,
                  0,
                  nil);

  ShowMessage(sBuffer);

end;


GetLastError与SetLastError的使用和注意事项

GetLastError 与 SetLastError

复制代码
#include <windows.h>
#include <stdio.h>

#define ERROR_NOT_SUPPORTED              50L

int func(int m)
{
    if(m == 0 )
        //SetLastError(0xe0000001);
        SetLastError(ERROR_NOT_SUPPORTED);
    else
        return true;
    return false;

}

void main ()
{
    if(!func(0))
        printf("%x\n",GetLastError());
    else
        printf("is true\n");
    //system("pause");
    Sleep(500000);
}
复制代码

也许一眼看去,这东东还很好用,但在实际运用中就会有很多问题了。一般它的使用有很大局限性,即是一个函数内部至少一次Set,而每次调用后应馬上Get。不然下次得到的就不一定是你想要的那一次ERROR了,即被告覆盖了。


GetLastError()函数的介绍

这是一个很简单的函数,它的作用就是取得上一个函数操作时所产生的错误代码。
通过错误代码,就可以在winerror.h头文件中查找到每一中错误代码所表示的含义。也可以通过VC++自带的Error Lookup工具来查找其所表示的含义,其结果是一样的。

此函数的说明如下:
DWORD GetLastError(void);

这是一个没有参数的函数,通过调用,就返回一个32位的数值。

下面编写了一个很简单的VC++例子来说明此函数

#include <windows.h>

int WINAPI wWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
 HANDLE hfile=CreateFile("c://a.txt",0,0,NULL,OPEN_EXISTING,0,NULL);
 DWORD k=GetLastError();
 return 0;
}

这里,CreatFile是一个函数,即为已经存在的文件创建文件句柄,函数如果操作成功,就会返回0

我们用k变量来捕捉GetLastError函数返回的数值
然后在最后一句设置断点,就可以直观的看到变量k的数值了。
然后,我们在c:/建立一个文件,文件名就是a.txt

这是个正确的函数调用,所以,k为0;

当把"c://a.txt",更改为"c:/a.txt"后,k为123;
通过Error lookup工具的检索,可知,其含义为:“文件名、目录名或卷标语法不正确”

当把"c://a.txt",更改为"c:/b.txt"后,k为2;
通过Error lookup工具的检索,可知,其含义为:“系统找不到指定的文件”


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值