我记得我在学C++时候,总结的是Handle是个空指针(我那时候认为空指针是等于0的,不知道对不对), define NULL,0
现在delphi里我发现null和0是不一样的,需要大家帮我区分下null,nil,0,以及handle,顺便想问下Delphi里的空指正好象和0好象是两码事情?
需要高手帮我指点一下

解决方案 »

  1.   

    delphi下没有null的,为空的是nil
      

  2.   

    DELPHI 里没有NULL,用NIL代替。而NULL是个函数。
      

  3.   

    比如:var Handle:THandle;
    begin
    ...
      hwnd := Findwindow('TForm1','Form1');
      if hwnd <> null then(我测试过在这里用Null,和0一样都可以运行if 判断都为真......
      begin
        
         .....
      end;end;
      

  4.   

    null 空
    0 是一个数值为0,是被定义过的
    但两者在存储内容上是无区别的,delphi里的null具体还是要兼容一些windows底层API吧,其他都在内部自动转换了,毕竟当初创作delphi的工程师有时也会出小差错,这两个在某些地方还是不能通用的。
    nil是空指针,在delphi里是指针类型就是了
    handle刚声明时好像是一个无效句柄,具体数值多少忘了,编译器一般在很多forms把没定义的句柄自动附为0,但系统的API可不会。。
      

  5.   

    类型不同而已,nil是用来形容指针这种数据类型的,表示其为空,在本质上(内存中的内容)是0
    在VC中,为区分各种不同的句柄,所以定义了很多常量,如HWND、HFILE、HMUTEX等,因为这些句柄是不同的含义,并不能通用(需要传递HWND的API函数,你给他一个文件句柄肯定是错误的),所以最好是让它们有类型,于是VC中使用了结构体指针,为每种不同的句柄定义一种结构体指针,在编译时就会识别类型,能够帮助开发人员减少错误。(类似用枚举替代整数来区分某些类型一样)而在Delphi中因为没有宏定义,想定义那么多种结构体指针显得比较乱,所以直接用DWORD替代了,因此在要传HWND的API函数中你传递文件句柄时,编译照样能通过。强类型的语言的优势就在这里,能够在编译期就尽可能多的发现错误。