一直在做java的BS开发,所以不太懂delphi,请教一下大家!
项目里需要做一个接口,由于要调用dll,所以只有用js调用ocx,ocx作为中间层调用接口方的dll,以前已实现过其他接口,所以方案是可行的。
这次调用的dll是api方式的(貌似是C写的),头文件如下:
typedef void (WINAPI *Callback)(char *msg); //回调函数类型
extern "C"
{
  void __stdcall SetClientCallback(Callback lpCallback);
  void __stdcall Request(const char* EntPara, char* RetPara,  short* iRetValue);
}
接口定义:
void Request(char* EntPara[in],char* RetPara[out],Short *iRetValue[in,out])
目前静态声明,1:
procedure Dll_Request(var inPara,outPara: PChar;var retPara:array of short);stdcall;external 'miclient.dll' name 'Request';
调用
Dll_Request(inPara,outPara,retPara);
调用好像有异常目前静态声明,2:
procedure Dll_Request(var inPara,outPara: array of char;var retPara:array of short);stdcall;external 'miclient.dll' name 'Request';
调用
Dll_Request(inPara,outPara,retPara);
调用后属性未返回求教应该怎么调用才能正确

解决方案 »

  1.   

    Short *iRetValue对应的翻译为iRetValue: PShortInt
      

  2.   


    哦 谢谢 我试试
    那char* RetPara 用 PChar 还是 array of char 合适一些?
    之前一个接口char*用 array of char 调用成功了
      

  3.   


    哦 谢谢 我试试
    那char* RetPara 用 PChar 还是 array of char 合适一些?
    之前一个接口char*用 array of char 调用成功了
    array of char类型的数组名实际为指针,只要大小合适,是可以的。最好用pchar,getMem
      

  4.   

    Request(const char* EntPara, char* RetPara,  short* iRetValue);
    应该是这样
    Request(const EntPara: PAnsiChar; RetPara: PAnsiChar;  iRetValue: PShortInt);
      

  5.   

    array of char换成PChar,不要传递array of char这种,不能用以前的来看,不同的dll虽然你看上去他都是Char*,但是实际上内部实现鬼知道他是怎么写的,一般见着Char*的就用PChar代替就没有问题!
      

  6.   

    页面调ocx控件 这步确认没问题吧
      

  7.   

    Delphi的动态数组在C里面没有可以对应的类型.
    这里你还是用Pansichar吧.