当前位置: 代码迷 >> PB >> 调用DLL的函数报错, 急
  详细解决方案

调用DLL的函数报错, 急

热度:51   发布时间:2016-04-29 05:36:58.0
调用DLL的函数报错,请求帮助 急!
最近我们公司的HIS系统想跟别人的系统做个接口,然后要调用他们的DLL里面的方法

函数声明如下:
Function tns9__checkreplyint CheckRemaining(tns1__certifyint mmmedcardcheckinfo) Library "TKShell.dll"  
窗口调用代码:
tns9__checkreplyint     tns9
tns1__certifyint     tns1  
tns1.medCardNo='101463000018'
tns1.cardPassword='123456'
tns9  = CheckRemaining(tns1)
报错误如下:
Bad runtime funtion reference at line 5 in cliecked event if object cb_2 of w_test


CheckRemaining是调用方法,tns1__certifyint、tns9__checkreplyint 是结构体,后来问了别人的公司,他们说是用JAVA开发的,通过封装好的DLL来访问他们的WebService,函数传值跟返回值都是对象、类,用PB来说,对象、类就是结构体吧,那为什么会报这个错误呢,后来尝试着把返回值改了,改成long,int,string等都是能正常调用方法,并且有值返回,PB也么有报错,那是不是我声明函数不对还是哪里出错了,后来他们发了一个delphi引用的实例过来:

var
  mUserInfo:CertifyInt;
  mCheckReply:CheckReplyInt;
  i:integer;
begin
  mUserInfo:=CertifyInt.Create();
  mUserInfo.medCardNo:='101463000018';
  mUserInfo.cardPassword:='123456';
  mCheckReply:= CheckRemaining(mUserInfo);
  showmessage(FloatToStr(mCheckReply.RestMoney));
end;

麻烦大伙帮我看看是不是我哪里写错了,望懂的人指点一下
------解决方案--------------------
引用:
最近我们公司的HIS系统想跟别人的系统做个接口,然后要调用他们的DLL里面的方法

函数声明如下:
Function tns9__checkreplyint CheckRemaining(tns1__certifyint mmmedcardcheckinfo) Library "TKShell.dll"  
窗口调用代码:
tns9__checkreplyint     tns9
tns1__certifyint     tns1  
tns1.medCardNo='101463000018'
tns1.cardPassword='123456'
tns9  = CheckRemaining(tns1)
报错误如下:
Bad runtime funtion reference at line 5 in cliecked event if object cb_2 of w_test


CheckRemaining是调用方法,tns1__certifyint、tns9__checkreplyint 是结构体,后来问了别人的公司,他们说是用JAVA开发的,通过封装好的DLL来访问他们的WebService,函数传值跟返回值都是对象、类,用PB来说,对象、类就是结构体吧,那为什么会报这个错误呢,后来尝试着把返回值改了,改成long,int,string等都是能正常调用方法,并且有值返回,PB也么有报错,那是不是我声明函数不对还是哪里出错了,后来他们发了一个delphi引用的实例过来:

var
  mUserInfo:CertifyInt;
  mCheckReply:CheckReplyInt;
  i:integer;
begin
  mUserInfo:=CertifyInt.Create();
  mUserInfo.medCardNo:='101463000018';
  mUserInfo.cardPassword:='123456';
  mCheckReply:= CheckRemaining(mUserInfo);
  showmessage(FloatToStr(mCheckReply.RestMoney));
end;

麻烦大伙帮我看看是不是我哪里写错了,望懂的人指点一下


不要返回对象,PB支持的不好,建议用string类型,把多个值拼成一个字符串,然后在PB中拆分

如果真的返回对象,建议你研究一下pbni,这个应该可以实现
------解决方案--------------------
pb不支持复杂类型的返回(如某种语言的特定对象),版主的意思是你可以用支持它的语言去访问它,再通过dll方式写接口写pb调用
  相关解决方案