ocx调用dll的问题

chen410439081 2017-09-19 03:30:16
写了一个ocx控件,调用了一些dll,有些是注册需要的dll(叫A.dll),但有些是运行ocx需要的dll(B.dll),
现在的问题是,比如C程序调用了ocx控件,我必须把B.dll放到系统目录或者C程序运行目录,
我不想把B.dll放到系统目录,但是问题来了 我现在不知道什么程序会调用我的ocx,也就不知道我的B.dll需要放在哪里,
这个问题怎么解决啊~
...全文
1374 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
睡在床板下_ 2018-11-02
  • 打赏
  • 举报
回复
1、解决方案就是ocx中设置dll加载路径setdlldirectory 2、还有就是ocx 使用动态加载dll的方式
zorro97 2018-07-21
  • 打赏
  • 举报
回复
ocx用到的dll一般放在调用ocx程序的目录,例如ie调用ocx ,ocx用到的dll放在ie目录保证没问题。
许文君 2017-10-11
  • 打赏
  • 举报
回复
在dllmian开始时设置setdlldirectory试试
dvlinker 2017-09-30
  • 打赏
  • 举报
回复
你要约定啊,你告诉用户需要把dll防止在ocx同目录下,这样在用户的安装包中会按照这个处理的!
qq_38687221 2017-09-29
  • 打赏
  • 举报
回复
有个问题,是不是其它程序都是通过你的C运行程序来调用ocx的,还是直接调用OCX。但不管什么方式,只要是你的主进程调用ocx,只要把你的ocx依赖的dll库放到主进程目录下就可以了。
chen410439081 2017-09-25
  • 打赏
  • 举报
回复
引用 7 楼 Saleayas 的回复:
提示你一下,如果你的 C 在远程计算机上,难道你还要放在那个远方的电脑里。 所以最佳的做法是放在系统的目录,包括你的 .ocx 文件都应该放在系统目录里面。 如果你此时实在不想放在系统目录,此时你可以为 OCX 设置你自己的目录,然后在注册表项里面设置绝对路径。 此时你引用的 .dll 如果仅仅是为 OCX 使用的,可以放在你期望放置的任何位置,但是绝对不是 C 所在位置,因为你不知道 C 是谁。 此时最好是像 OCX 那样放在 .dll 所在的目录或者是自己专门的目录。 此时在你的 OCX 加载这个 .dll 时候,使用绝对路径加载。这个绝对路径可以是静态的,也可以是动态的,但是你加载的时候,必须知道她到底在哪里。 如果你不能使用 LoadLibrary 手动加载,而是自动加载,那么使用 SetDllDirectory 设置加载路径。
嗯 就是这样的 我查下怎么设置ocx的dll加载目录
chen410439081 2017-09-25
  • 打赏
  • 举报
回复
引用 6 楼 lzlliuzunli 的回复:
不科学,ocx依赖应该在ocx目录下找才对,莫非你是用LoadLibrary指定当前进程的相对路径?
没有用loadlibrary,自动加载的,其实是用的bcg库的一个风格dll,BCGPStyle2010Blue2210.dll这个dll是在C加载ocx的时候在系统目录或者C的目录下找的,而不是在ocx的目录下找
Saleayas 2017-09-20
  • 打赏
  • 举报
回复
提示你一下,如果你的 C 在远程计算机上,难道你还要放在那个远方的电脑里。 所以最佳的做法是放在系统的目录,包括你的 .ocx 文件都应该放在系统目录里面。 如果你此时实在不想放在系统目录,此时你可以为 OCX 设置你自己的目录,然后在注册表项里面设置绝对路径。 此时你引用的 .dll 如果仅仅是为 OCX 使用的,可以放在你期望放置的任何位置,但是绝对不是 C 所在位置,因为你不知道 C 是谁。 此时最好是像 OCX 那样放在 .dll 所在的目录或者是自己专门的目录。 此时在你的 OCX 加载这个 .dll 时候,使用绝对路径加载。这个绝对路径可以是静态的,也可以是动态的,但是你加载的时候,必须知道她到底在哪里。 如果你不能使用 LoadLibrary 手动加载,而是自动加载,那么使用 SetDllDirectory 设置加载路径。
lzlliuzunli 2017-09-19
  • 打赏
  • 举报
回复
不科学,ocx依赖应该在ocx目录下找才对,莫非你是用LoadLibrary指定当前进程的相对路径?
lzlliuzunli 2017-09-19
  • 打赏
  • 举报
回复
用Depends看下你的C程序是不是也依赖B.dll了
lzlliuzunli 2017-09-19
  • 打赏
  • 举报
回复
.ocx依赖的dll只需要和.ocx放到一起就可以了
chen410439081 2017-09-19
  • 打赏
  • 举报
回复
引用 4 楼 lzlliuzunli 的回复:
用Depends看下你的C程序是不是也依赖B.dll了
不依赖啊,是ocx在初始化的时候要调用B.dll,但是通过C程序调用ocx时,ocx就会在c程序目录找b.dll
chen410439081 2017-09-19
  • 打赏
  • 举报
回复
引用 1 楼 lzlliuzunli 的回复:
.ocx依赖的dll只需要和.ocx放到一起就可以了
但是B.dll放到ocx的目录下,提示加载B.dll失败,我放到C程序运行目录就可以成功加载
chen410439081 2017-09-19
  • 打赏
  • 举报
回复
但是B.dll放到ocx的目录下,提示加载B.dll失败,我放到C程序运行目录就可以成功加载

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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