各位大侠现在我想调用一下客户用VC编的一个DLL,但其中两个不知道在delphi下该如何翻译成相应的类型,望指点:
Get_System_Information(LPCTSTR CfgFile,LPCTSTR lpCfgItemName,SYS_INFO_STRUCT& SysInfo);其中SYS_INFO_STRUCT为自己定义的一结构体
G4GetIdentifyInfo (char* CfgFileName, unsigned char *pDataInfo);
请把这两个函数的五个参数,在delphi下如何定义,给详细写一下,多谢!

解决方案 »

  1.   

    欢迎大家加入DELPHI程序员群1805366 ,一起交流技术!
      

  2.   

    LPCTSTR在Delphi也有定义,至于结构SYS_INFO_STRUCT你用record来代替;"引用"记得在Delphi中用指针来代替
    char*用PChar代替即可。
      

  3.   

    type
      PSYS_INFO_STRUCT = ^SYS_INFO_STRUCT;
    Get_System_Information(CfgFile: PChar; lpCfgItemName: PChar; SysInfo: PSYS_INFO_STRUCT);
    G4GetIdentifyInfo (CfgFileName: PChar; pDataInfo: PChar);在delphi里, Char 和 unsigned char 是同一类型.
    但为了共好的通用. 你可以用 Byte 代替Chartype
      PByte = ^Byte;
    G4GetIdentifyInfo (CfgFileName: PByte; pDataInfo: PChar);
      

  4.   

    楼上说的很有道理!现在再问一个:G4Open(HANDLE &hCom);该怎么如何?Handle有问题:
    [Error] interfacedll.pas(14): Undeclared identifier: 'HANDLE'
      

  5.   

    HANDLE 在 Delphi 里是 THANDLE
      

  6.   

    再问一下是这样吗?PTHANDLE=^THANDLE;
    function G4Open(hcom:PTHANDLE):integer;stdcall; external 'GyReaderApi.dll';
    hCom:=INVALID_HANDLE_VALUE;
    ret:=G4Open(hcom);
    Edit1.Text:=inttostr(ret);
    但这样编译都有问题呀!困惑!
      

  7.   

    因为在VC下,hcom需要赋初值INVALID_HANDLE_VALUE,这点在delphi下有些乱呀?该如何解决?多谢!!!
      

  8.   

    也可以这样说,在VC下的功能代:G4Open(HANDLE &hCom)(声明); hCom:=INVALID_HANDLE_VALUE;
    ret:=G4Open(hcom);这三句连起来,在delphi下如何翻译?多谢!急!!!!
      

  9.   

    G4Open(var  hCom:THANDLE )
      

  10.   

    LPCTSTR An LPCWSTR if UNICODE is defined, an LPCTSTR otherwise. 
    这个类型用的时候我建议小心点比较好。
    其他几个类型都比较单纯,与DELPHI的类型比较一下就可以了。
      

  11.   

    uses
      windows;
    G4Open(var  hCom:THANDLE );
    hCom:=INVALID_HANDLE_VALUE;
    ret:=G4Open(hcom);
      

  12.   

    hCom^ := INVALID_HANDLE_VALUE;hCom是个指针啊. 指针的用法这一点和 C 语言是一样的.

    int *i;
    *i = 100;
      

  13.   

    晕, Delphi 里还要这样用啊.
    晕死...再问一下是这样吗?
    type
      PTHANDLE=^THANDLE;
      function G4Open(hcom:PTHANDLE):integer;stdcall; external 'GyReaderApi.dll';var
      hCom : PTHANDLE;
      Temp: THANDLE;
    begin
      Temp := INVALID_HANDLE_VALUE;
      hCom := @Temp;
      ret:=G4Open(hcom);
      Edit1.Text:=inttostr(ret);
    end;// 它一声明时是没有分配空间的. 所以会导致出错.
    // 这一点和 C 有区别, 郁闷ing
      

  14.   

    LPCTSTR = PAnsiChar; 
      LPTSTR = PAnsiChar;
      LPWSTR = PWideChar;
      PLPWSTR = ^LPWSTR;这是在Windows里的定义
    其中, PAnsiChar 与 PChar 是通用的.
      

  15.   

    多谢cmain83,现在编译是没问题了!不过底层程序出了点问题,暂时没法调试了!
      

  16.   

    昨天试了一下,我把hCom^(hcom):=INVALID_HANDLE_VALUE这句屏了,也不行。屏和不屏,编译时都没出错,但运行时错误的现象不同。跟软件提供商咨询了一下,他说int=G4Open(HANDLE &hCom),&在这里表引用,我在delphi下该如何做呢?
      

  17.   

    楼主,你是在Delphii里隐式调用VC写的DLL么?为什么不显示调用呢?我现在也要做累死的东西(在Delphi里调用VC写的Dll)还没有思路,请指点
      

  18.   

    我也试过delphi调vc的dll,比较简单的,主要是数据类型的转换
    char*用PChar代替即可
      

  19.   

    o,rabbitlzx理解的什么叫阴式调用什么叫显式调用?
      

  20.   

    隐式调用就是应用程序一开始运行就调用所需的dll,知道程序结束才释放;显示调用是可以由自己控制什么时候调用,什么时候释放,用LoadLibrary()函数加载DLL,用GetProcAddress()获得函数指针,用FreeLibrary()释放调用的DLL,因此有更大的灵活性
      

  21.   

    引用和指针是不一样的,你看过我上面的回复没有,C里引用相当于DELPHI 里的VAR声名的参数