Powerbuilder(PB)调用dll时调试运行报错无法调用外部函数功能而编译后却正常?

Powerbuilder

首先这个问题就比较费解,超出常规认识。一般我们要知道:dll必须在系统目录或者当前目录,或者系统path所指定的搜索路径。这是三个准绳,绝对的真理。

换言之,一般安装程序会拷贝dll到系统目录,这是常用做法,但是容易给系统留下垃圾;

另外就是放系统exe所在的目录,也能正常运行,但是有个条件,不能用程序代码切换当前目录,好像切换了对于dll和图片相对路径的调用就有问题(不确定。。可以自己求证);

这里需要自己求证:系统全局外部dll和窗口上声明的外部dll,他们是在什么时间装载到内存。SetCurrentDirectory()是否会造成dll无法被加载,自己求证吧。

第三个方法就是设置到path中,加入dll所在的路径,很多手工配置软件就会遇到,特别是非window的软件最习惯搞这个东东了;

另外就是权限问题,比如win10,11安装了一些软件比如pb9,但是pb9的dll所在的路径却没有被设置进path中,这个就要手工修改添加了。估计是权限的问题。(我就遇到过,pb9可以运行,但是其他的exe编译后想直接运行,因为需要pb9的dll,就无法运行,都不用查找原因啦,这种情况直接就提示pbvm90.dll和pbdwe90.dll等动态库无法找到啦。)

看了文件夹,dll的确在代码目录中,看了外部函数申明,也没有问题。

又以为是ocx,注册;也不行。

在Windows系统中,dll文件通常存放在以下几个目录:

  1. C:\Windows\System32
  2. C:\Windows\SysWOW64(64位系统)
  3. 应用程序的安装目录

拷贝到系统c:\window\system32下面,也不行。

尝试重启电脑,OK,可以了。

为何拷贝后还不行呢。可能是程序运行,已经加载到内存中等等原因。

总之不清楚,就这样搞定了。