BCB的EXE能否静态调用子目录下的DLL

现在由于某种需求,DLL不能和EXE放在一个目录下;也不希望将DLL放在System32目录下。
并且之前DLL都是静态调用使用的,现在问题是能否不改变调用方式就通过建立一个子目录方法
让DLL和EXE不在同一目录,并且也可以静态调用。

我就想把DLL放在EXE所在目录的子目录中静态调用,到底有没有办法实现啊?
当然不准修改系统PATH目录

lib文件放在什么地方,只在编译期有意义。编译完成后,lib文件就没用了。

楼主的需求,又不允许更改path,实现有难度

你看看你的PATH路径中是否加了C:/Documents and Settings/EMI-TE/桌面/hhh/lib/这个路径的啊!
我其实不要固定路径DLL,因为用户可能直接拷贝过去使用,所以希望放在EXE的子级目录下。
希望你再测试,看看能否实现。

我没有添加这路径到工程,只是编译时,加入了这个路径#pragma comment(lib, "C:/Documents and Settings/EMI-TE/桌面/hhh/lib/AddDll.lib")
按照妖哥说的,编译后再改路径我也不会..

编译时这个lib文件放在什么地方都可以。编译完lib就没用了。运行时只按固定的几个目录去找dll,找不到就报错。

这其实和bcb本身无任何关系,之和系统搜索dll的目录次序有关系
系统默认只搜索当前目录,系统目录等几个目录,如果找不到,直接提示没有

1 你在你程序里面取path, set path,这是只是你来用的啊.
跟别人没关系啊, 也没改系统的啊.

2既然是静态用了, 为啥非要是DLL 呢.
你把DLL编译成LIB, 主程序直接LIB好了.
直接生成到目标文件了, 就是目标文件大了点啊.
是呀,那还是存在如果LIB变了,主程序也要跟着编译的问题,
我只是提供一个想法,如果实在不行,我再考虑其他的方法。
因为我记得DELPHI似乎提供external 然后指定路径的方法,不知道BCB提没提供?

.DELPHI提供了,BCB基本上都有(不能说一定有:) ).
2. 你使用DLL 方式是每次程序更新发布一个DLL 就好了.
  使用LIBRARY呢,是每次发布一个exe.其实差不多了,我svn做dailybuild. 天天编译.
  看项目管理和部署了,提倡分很多个DLL的 可能不喜欢这个方式. 但是你实际项目不同,就你目前这个例子来说,人家就不给你DLL 另外的路径.

3.或者你还是用DLL, 把DLL生成的路径统一指定到项目的bin 下面,整个项目的exe dll都在一个目录下面.
如果说你的主程序是根据条件执行不同路径下同名的DLL,你主程序做个设置好了,记录当前用那个目录的, 要配置到哪个目录的DLL, 一旦发现不一样, 就把bin下这个删除了.把另外一个要配置的DLL复制到BIN下面,然后记录当前使用DLL.


看人家对你的要求,好象意思就是说做绿色软件,目录整个复制过来就能用,不需要配置. 或者说在安全管理就把你限定在一个目录下面. 嘿嘿:)

好像刚才看到过类似的帖子, 方法也有。分2种情况

1、 DLL 你自己写的。这个最简单, 工程选项里面,有个 lib dll 输出名字的前导设定, 好像记得是 pre...什么的东西。 你在那里把 前导写成一个路径,例如 dir/mydll.dll 。 这样,生成的 LIB 中就会指明程序需要的 DLL 文件是在 DIR 子目录中了。 具体做法很多年没用过了, 自己研究一下就行,应该很简单。

2、DLL 不是自己写的。 这个稍微麻烦一点, 需要用 16 进制编辑工具,修改 LIB 文件中默认的导出库名称。 通常情况下, A1234567.DLL 配对的 A1234567.LIB 中, 会有一个导出函数库的名字,通常是 A1234567 , 用来指明 LIB 中引入的函数,都是在 A1234567.DLL 中实现的。 
那么,此时你可以将 LIB 中的这个 A1234567, 修改为 DIR/A123 , 这样,你就可以把 A1234567.DLL 放到子目录 DIR 中, 并且需要改名为 A123.DLL 。 这是因为 DIR/A123 的长度不能超过 A1234567 库名字的长度。可以短,但是不能超过。

我现在晓得的就这2种方法了。楼主不妨试试, 如果不行也不能怪我呦。

来源:nba直播




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值