当前位置: 代码迷 >> PB >> 请问:PB 怎么声明调用delphi写的dll
  详细解决方案

请问:PB 怎么声明调用delphi写的dll

热度:75   发布时间:2016-04-29 08:11:38.0
请教:PB 如何声明调用delphi写的dll
最近做医院接口,他们的dll是用delphi写的,如下:
b. Init(AIniDir: pChar):integer;  
参数为pcahr类型,返回值为整型
我在pb这样声明:
FUNCTION integer Init ( string AIniDir ) library "hisinterface.dll"
调用代码如下:
int ls_connect 

string AIniDir
AIniDir=space(256)
AIniDir="E:\HIS测试\"
ls_connect=Init(AIniDir)
在调用的时候就报错了:

ls_connect=Init(AIniDir),这句报错了
错误信息是:bad runtime function reference ,请各位帮我分析一下

------解决方案--------------------
FUNCTION long Init ( ref string AIniDir ) library "hisinterface.dll"

------解决方案--------------------
b. Init(AIniDir: pChar):integer;
参数为pcahr类型,返回值为整型
我在pb这样声明:
FUNCTION integer Init ( string AIniDir ) library "hisinterface.dll"
调用代码如下:
int ls_connect

string AIniDir
AIniDir=space(256)
AIniDir="E:\HIS测试\"
ls_connect=Init(AIniDir)

问题: AIniDir 提供接口方是否为输出;
如果不是输出 就不用ref 了否则要ref 和space(100)
只是输入就直接 ls_connect=Init(="E:\HIS测试\")
这样就可以了



------解决方案--------------------
Init(AIniDir: pChar):integer
pChar是等同于pb的字符串,问题是,它是ansi的单字节字符串,以\0作为结束。
pb10以下,应该传入string没问题。10以上要使用string()函数转换为ansi编码的吧。因为10以上是unicode。

  相关解决方案