Global External Functions 定义外部DLL

时间:2021-11-07 17:07:54
1.首先保证 yhybReckoning.dll 这个dll没有错误
2.下面是我在pb中的定义的写法
Function string DataDown_sp(string DownLoadStr,string DownloadLSH,ref string Rec_Data_Rs) library "yhybReckoning.dll"  alias for "_DataDown_rs@12"
3.下面是我程序中的调用的写法、
String s_outputstr//返回值
String s_inputstr//输入值
String s_returnstr
s_inputstr = ‘测试|A#’
s_returnstr = DataDown_sp(s_inputstr,"J",s_outputstr)
If Trim(s_returnstr) <> '' Then
   MessageBox('',s_returnstr)
Else
   。。。。。
End If
4.现象:DataDown_sp 执行成功,并且能正确返回数值,然后程序立刻终止运行,直接退出
5.版本:9.03 build 8836

请指点下,谢谢!

21 个解决方案

#1


路过

#2


你真快

#3


s_outputstr需要先初始化,分配一段内存空间,
在函数调用前把s_outputstr=space(255)之类的,255为你可能返回的最大值

#4


谢谢3楼提醒
我明天试试,现在没有测试环境

#5


呵呵,好好休息吧,这类问题见得多了,一抓一个准,放心睡吧

#6


问下 s_outputstr 这个返回值 是不确定长度的字符串,我多分配一些可以吗?

#7


可以,如果你对性能要求不是很高的话也可以space(500)或space(1000)之类的,多分配一些就好,

#8


不过现在的电脑分配1000和5000性能是看不出什么区别的,呵呵

#9


好的,多谢了
我以前也用过不少外部调用dll的 都是 没有预先分配的。
这次做的是 医保接口的 dll调用

#10


呵呵,ref方式传递的字符型变量不分配的话,十有八九会出错的,偶尔也能通过,但理论上也是必须分配的,否则dll内部是无法返回值给pb的

#11


“十有八九会出错的,偶尔也能通过”确实是这种现象

#12


百度了很多,也没找到合适的说法。
谢谢老兄了,安心睡觉了 ^_^

#13


而且98/2000/xp上的出错机率和提示的错误还不一样,呵呵,所以弄得蛮多程序员都碰到过这个问题,在自己机器上可以其他的不行,呵呵,还有个办法,你可以看一下windows的事件查看器,里面也可以查看到一些信息的

#14


不需要找其他说法的,就是那一句,传址变量必须先分配空间再使用就可以了
引用 12 楼 leadinggroup 的回复:
百度了很多,也没找到合适的说法。
谢谢老兄了,安心睡觉了 ^_^

#15


嗯,是看了,不过很多看不明白
什么 pbvm90.dll 然后就是什么版本的 和一大串的字符

#16


pb8 很熟悉的名字
您是不是在原来的 华软网上也注册过?

#17


昕晨 空间的

#18


pbvm90.dll出错除了内存只读一般就是不同pb版本的dll冲突问题,
有时候pb异常中断还可能是其他的dll出错,这样就可以关联到具体的出错类别上去了;

#19


呵呵,这个名字只在CSDN上用,华软有其它的号,
晚安贴~~

#20


都在后半夜干活,厉害。
这种问题我也碰到过,需要分配内存

#21


学习了,呵呵

#1


路过

#2


你真快

#3


s_outputstr需要先初始化,分配一段内存空间,
在函数调用前把s_outputstr=space(255)之类的,255为你可能返回的最大值

#4


谢谢3楼提醒
我明天试试,现在没有测试环境

#5


呵呵,好好休息吧,这类问题见得多了,一抓一个准,放心睡吧

#6


问下 s_outputstr 这个返回值 是不确定长度的字符串,我多分配一些可以吗?

#7


可以,如果你对性能要求不是很高的话也可以space(500)或space(1000)之类的,多分配一些就好,

#8


不过现在的电脑分配1000和5000性能是看不出什么区别的,呵呵

#9


好的,多谢了
我以前也用过不少外部调用dll的 都是 没有预先分配的。
这次做的是 医保接口的 dll调用

#10


呵呵,ref方式传递的字符型变量不分配的话,十有八九会出错的,偶尔也能通过,但理论上也是必须分配的,否则dll内部是无法返回值给pb的

#11


“十有八九会出错的,偶尔也能通过”确实是这种现象

#12


百度了很多,也没找到合适的说法。
谢谢老兄了,安心睡觉了 ^_^

#13


而且98/2000/xp上的出错机率和提示的错误还不一样,呵呵,所以弄得蛮多程序员都碰到过这个问题,在自己机器上可以其他的不行,呵呵,还有个办法,你可以看一下windows的事件查看器,里面也可以查看到一些信息的

#14


不需要找其他说法的,就是那一句,传址变量必须先分配空间再使用就可以了
引用 12 楼 leadinggroup 的回复:
百度了很多,也没找到合适的说法。
谢谢老兄了,安心睡觉了 ^_^

#15


嗯,是看了,不过很多看不明白
什么 pbvm90.dll 然后就是什么版本的 和一大串的字符

#16


pb8 很熟悉的名字
您是不是在原来的 华软网上也注册过?

#17


昕晨 空间的

#18


pbvm90.dll出错除了内存只读一般就是不同pb版本的dll冲突问题,
有时候pb异常中断还可能是其他的dll出错,这样就可以关联到具体的出错类别上去了;

#19


呵呵,这个名字只在CSDN上用,华软有其它的号,
晚安贴~~

#20


都在后半夜干活,厉害。
这种问题我也碰到过,需要分配内存

#21


学习了,呵呵