一个第三方的动态连接库,其中一个函数,VC声明:
BOOL DLLOpenFile(LONG nPort,LPSTR sFileName);在DELPHI中,我的声明是:
function DLLOpenFile(nPort:int64;pcFileName:pAnsiChar):Boolean;external 'playdll.dll';但在执行到该函数时,却无法打开文件,利用该动态连接库中提供的GETLASTERR函数,得到的错误信息是“输入参数非法”。是我的声明有问题吗?另外,该函数在VB中能够打开文件。

解决方案 »

  1.   

    Delphi中默认的调用方式是stdcall,如你在VC中调用的话,请注意了,因为VC中默认的C语言调用!
      

  2.   

    to XINGXIMU:
    我也怀疑问题出在参数传递上,但具体是怎样的问题?这个函数一共只有两个参数,问题可能出在哪里?
    to redlegend_126_com:
    我已经把几种调用方式都试了:register、stdcall、......结果都是打不开
      

  3.   

    C\C++里的long类型在pascal里对应的是longint而不是int64
      

  4.   

    同意chijingde(AD),C++里面的long是32位有符号数,pascal里面32位有符号数的类型有:Integer和Longint,随便你用哪个来定义都行。
      

  5.   

    顺便再问一下:
    VC里的DWORD、UINT、hDC,hWnd在DELPHI里各对应什么?
      

  6.   

    以上全都是32位无符号整数,全部可以用LongWord代替不过Delphi对他们也都进行了声明,你可以直接用
      

  7.   

    function DLLOpenFile(nPort:integer;pcFileName:pChar):Boolean;external 'playdll.dll';