有一个用VC写的设备连接函数
HD_OpenPort(short PortNo,unsigned long Baud, short Parity, HANDLE *devNo);
我用DELPHI向*devNo赋值,应该使用什么变量类型?
PLongint和THandle型我都试过了,不行。

解决方案 »

  1.   

    PHandle也可以这样
    var
      hnd: THandle;
    HD_OpenPort(..., ..., ..., @hnd);
      

  2.   

    HD_OpenPort(PortNo: SmallInt; Baud: Cardinal; Parity: SmallInt; devNo: PHandle);or HD_OpenPort(PortNo: SmallInt; Baud: Cardinal; Parity: SmallInt; var devNo: THandle);都可以。
      

  3.   

    HANDLE *~~
    上面的就是正解
      

  4.   

    PHandle 也可以这样 
    var 
        hnd:   THandle; 
    HD_OpenPort(...,   ...,   ...,   @hnd);方法没错。
      

  5.   

    我用Delphi写的DLL调用下面VC写的DLL,我的上面是VC写的DLL调用我的。VCDLL1调用DelphiDLL调用VCDLL2。
    我的工作是要先从VCDLL2中取值,通过DelphiDLL中转,到VCDLL1中。
    两边VC都是Handle型,我想在DelphiDLL中同时完成取和传。
    dext说的:
    HD_OpenPort(PortNo:   SmallInt;   Baud:   Cardinal;   Parity:   SmallInt;   var   devNo:   THandle); 
    能够实现么?我现在用的就是这种,总是系统错误。
      

  6.   

    var devno: THandle 是最好的办法了
    注意函数是否加了 stdcall; 要不然出错
      

  7.   


    //如果在delphi中,函数引用声明成这样:
    HD_OpenPort(PortNo:   SmallInt;   Baud:   Cardinal;   Parity:   SmallInt;   devNo:   PHandle); 
    //那么这样调用没问题:
    var   
            hnd:       THandle;   
    HD_OpenPort(...,       ...,       ...,       @hnd); 
    ////////////////////////////////////////////
    //如果在delphi中,函数引用声明成这样:
    HD_OpenPort(PortNo:   SmallInt;   Baud:   Cardinal;   Parity:   SmallInt;   var   devNo:   THandle);
    那么要这样调用:
    var   
            hnd:       THandle;   
    HD_OpenPort(...,       ...,       ...,       hnd);  //这时自动把hnd的地址传给dll
    我搞不清楚,本来HANDLE一般就是一个指针了,为什么还要变成指针的指针!!!
    想这样:
    VOID PASCAL CloseCommPort(HANDLE hCom)
    功能说明:关闭指定的串行通信端口。
    参数说明: hCom 为端口句柄
    返回值:无
      

  8.   

    上面的是不是楼主?
    Handle 不是指针,是Integer
    函数要改变调用者的值就必然要申明成引用或指针
    上面不是说了,为什么不加stdcall;
    下面才是对的
    HD_OpenPort(PortNo:   SmallInt;   Baud:   Cardinal;   Parity:   SmallInt;   devNo:   PHandle); stdcall;