delphi 动态加载DLL文件问题

bluepph 2018-08-31 04:45:52
代码动态加载DLL使用的是LoadLibrary,
1.对方动态库文件只有1个,动态加载单个DLL文件正常(无论调用exe程序跟动态库文件是否在一个目录下)
2.对方动态库文件只有多个 如:A.DLL里面还需要调B.DLL。这时动态调用exe程序需要跟动态库文件在一个目录下,否则调用程序跟动态库不在同一目录下LoadLibrary(‘A.DLL’)这时返回的handle为0调用失败(非同一目录下静态调用可以正常调用)。

因为要调的对方动态库有多个厂家,不想放在同一目录入,这样比较乱。
问题:针对第2条 【对方的动态库是多个】并且【执行程序exe跟动态库不在同一目录下】如何动态调用代码应该如何写
...全文
487 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
加载之前把若干DLLs的位置添加到path就可以了,GetEnvironmentVariable、SetEnvironmentVariable
bluepph 2018-09-11
  • 打赏
  • 举报
回复
LoadLibrary动态加载只适合操作单个动态库文件
目前的情况是:
对方动态库有多个,A.dll是主动态库,A.dll里同时调用B.dll 但是对方写A.dll调用B.dll时没有指定B.dll的目录,所以我的程序想操作A.dll只能将exe程序跟A.dll,B.dll 放在同一目录下。 操作的动态库多了,文件夹里很乱。
SupermanTm 2018-09-06
  • 打赏
  • 举报
回复
既然你的 A.DLL 也是自己编写的,那还有什么问题呢?
你载入的时候 FDllHandle:= LoadLibrary(PChar(dllFileName)); 中可以加入路径的啊
boylafong 2018-09-03
  • 打赏
  • 举报
回复
因为要调的对方动态库有多个厂家,不想放在同一目录入 问题在于所有动态库的调用都是你来操作吗?是的话自己加个路径就可以了啊。
bx897911494 2018-08-31
  • 打赏
  • 举报
回复
我不太懂你的意思,我觉得你可能是这个意思。

./你的程序.exe
./A.dll
./新文件夹/B.dll

如果是这个意思的话。在调用B.dll的时候加入路径即可。
LoadLibrary(‘./新文件夹/B.DLL’)

./一般指当前目录
../上级目录
.../上上级目录
以此类推

再做一点补充,希望可以帮助到你。
在A.dll里面写了LoadLibrary。程序执行的时候参数里的 ./ 的目录是执行程序的文件存放目录(除非你用过一些特殊手段处理过)。

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧