- 主题:请教一个dll调用dll的问题
基本上可以确定是目录的问题,找不到a.dll,才会在加载dll阶段报错;c++的程序不就是说明这一点了吗?
至于“运行时调到a.dll里的函数时,找不到函数”,不明白你出了什么问题?是函数不能工作?还是调试器里跟踪不进去?后者的话,那是因为没有调试符号,很正常。
【 在 simonvic 的大作中提到: 】
: 这个肯定不是目录的问题,因为我在b.dll把引用a.dll的函数删掉,其它函数的运行没问题,在python里也能调用。如果把那个函数加上,就不行了,直接报错
: FileNotFoundError: Could not find module 'b.dll' (or one of its dependencies). Try using the full path with constructor syntax.
: 在C++里一开始会报错找不到a.dll,这个是目录问题,把.lib,.dll都搞到当前目录,结果Load时倒是不报错了,就是运行时,运行到调用a.dll里面的函数时,找不到函数。
: ...................
--
FROM 221.218.214.*
python那个说明a.dll加载失败了
至于从b.dll调用a.dll里的函数,报错找不到,这个不太可能啊,找不到的话,你链接的时候为什么可以通过呢?除非a.lib和a.dll是不匹配的,a.lib包含了这个函数,但a.dll不包含。
a.dll导出的函数可以看到么?比如用depends这个工具
【 在 simonvic 的大作中提到: 】
: 不是这样,把a.dll,a.lib,b.dll都放在同一目录,也是一样的现象,python程序里用的是cdll.LoadLibrary('b.dll'),当b.dll里面不包含a.dll里面的函数时,这个load是成功的,其它函数也能正常调用,当增加了调用a.dll的函数时,这个LoadLibrary就会失败。这点确实很诡异,不太理解为什么。
: 找不到函数是b.exe里可以跟踪到b.dll里的函数,但是a.dll里的函数a调用失败,调试时的错误信息就是找不到函数。
:
--
FROM 221.218.214.*
肯定是可以的,大量使用过
你用depends分别加载b.dll和a.dll试试,看有说明问题,估计是一些细节
【 在 simonvic 的大作中提到: 】
: a.lib和a.dll是一致的,没问题,因为我首先是用C++做了个exe,调用这个a.dll,一切正常。然后把这个exe改写成dll,供python调用,这里就出问题了。我之前都是引用的静态库,从来没有在动态库里使用动态库的导出lib去链接过,不知道这样行不行,你这么用过吗?
:
--
FROM 221.218.214.*