现在的问题是,比如C程序调用了ocx控件,我必须把B.dll放到系统目录或者C程序运行目录,
我不想把B.dll放到系统目录,但是问题来了 我现在不知道什么程序会调用我的ocx,也就不知道我的B.dll需要放在哪里,
这个问题怎么解决啊~
12 个解决方案
#1
[.ocx依赖的dll只需要和.ocx放到一起就可以了, 但是B.dll放到ocx的目录下,提示加载B.dll失败,我放到C程序运行目录就可以成功加载,
但是B.dll放到ocx的目录下,提示加载B.dll失败,我放到C程序运行目录就可以成功加载 , 用Depends看下你的C程序是不是也依赖B.dll了,
不依赖啊,是ocx在初始化的时候要调用B.dll,但是通过C程序调用ocx时,ocx就会在c程序目录找b.dll, 不科学,ocx依赖应该在ocx目录下找才对,莫非你是用LoadLibrary指定当前进程的相对路径?, 提示你一下,如果你的 C 在远程计算机上,难道你还要放在那个远方的电脑里。
所以最佳的做法是放在系统的目录,包括你的 .ocx 文件都应该放在系统目录里面。
如果你此时实在不想放在系统目录,此时你可以为 OCX 设置你自己的目录,然后在注册表项里面设置绝对路径。
此时你引用的 .dll 如果仅仅是为 OCX 使用的,可以放在你期望放置的任何位置,但是绝对不是 C 所在位置,因为你不知道 C 是谁。
此时最好是像 OCX 那样放在 .dll 所在的目录或者是自己专门的目录。
此时在你的 OCX 加载这个 .dll 时候,使用绝对路径加载。这个绝对路径可以是静态的,也可以是动态的,但是你加载的时候,必须知道她到底在哪里。
如果你不能使用 LoadLibrary 手动加载,而是自动加载,那么使用 SetDllDirectory 设置加载路径。,
没有用loadlibrary,自动加载的,其实是用的bcg库的一个风格dll,BCGPStyle2010Blue2210.dll这个dll是在C加载ocx的时候在系统目录或者C的目录下找的,而不是在ocx的目录下找,
嗯 就是这样的 我查下怎么设置ocx的dll加载目录, 有个问题,是不是其它程序都是通过你的C运行程序来调用ocx的,还是直接调用OCX。但不管什么方式,只要是你的主进程调用ocx,只要把你的ocx依赖的dll库放到主进程目录下就可以了。, 你要约定啊,你告诉用户需要把dll防止在ocx同目录下,这样在用户的安装包中会按照这个处理的!, 在dllmian开始时设置setdlldirectory试试]
但是B.dll放到ocx的目录下,提示加载B.dll失败,我放到C程序运行目录就可以成功加载 , 用Depends看下你的C程序是不是也依赖B.dll了,
不依赖啊,是ocx在初始化的时候要调用B.dll,但是通过C程序调用ocx时,ocx就会在c程序目录找b.dll, 不科学,ocx依赖应该在ocx目录下找才对,莫非你是用LoadLibrary指定当前进程的相对路径?, 提示你一下,如果你的 C 在远程计算机上,难道你还要放在那个远方的电脑里。
所以最佳的做法是放在系统的目录,包括你的 .ocx 文件都应该放在系统目录里面。
如果你此时实在不想放在系统目录,此时你可以为 OCX 设置你自己的目录,然后在注册表项里面设置绝对路径。
此时你引用的 .dll 如果仅仅是为 OCX 使用的,可以放在你期望放置的任何位置,但是绝对不是 C 所在位置,因为你不知道 C 是谁。
此时最好是像 OCX 那样放在 .dll 所在的目录或者是自己专门的目录。
此时在你的 OCX 加载这个 .dll 时候,使用绝对路径加载。这个绝对路径可以是静态的,也可以是动态的,但是你加载的时候,必须知道她到底在哪里。
如果你不能使用 LoadLibrary 手动加载,而是自动加载,那么使用 SetDllDirectory 设置加载路径。,
没有用loadlibrary,自动加载的,其实是用的bcg库的一个风格dll,BCGPStyle2010Blue2210.dll这个dll是在C加载ocx的时候在系统目录或者C的目录下找的,而不是在ocx的目录下找,
嗯 就是这样的 我查下怎么设置ocx的dll加载目录, 有个问题,是不是其它程序都是通过你的C运行程序来调用ocx的,还是直接调用OCX。但不管什么方式,只要是你的主进程调用ocx,只要把你的ocx依赖的dll库放到主进程目录下就可以了。, 你要约定啊,你告诉用户需要把dll防止在ocx同目录下,这样在用户的安装包中会按照这个处理的!, 在dllmian开始时设置setdlldirectory试试]
#1
[.ocx依赖的dll只需要和.ocx放到一起就可以了, 但是B.dll放到ocx的目录下,提示加载B.dll失败,我放到C程序运行目录就可以成功加载,
但是B.dll放到ocx的目录下,提示加载B.dll失败,我放到C程序运行目录就可以成功加载 , 用Depends看下你的C程序是不是也依赖B.dll了,
不依赖啊,是ocx在初始化的时候要调用B.dll,但是通过C程序调用ocx时,ocx就会在c程序目录找b.dll, 不科学,ocx依赖应该在ocx目录下找才对,莫非你是用LoadLibrary指定当前进程的相对路径?, 提示你一下,如果你的 C 在远程计算机上,难道你还要放在那个远方的电脑里。
所以最佳的做法是放在系统的目录,包括你的 .ocx 文件都应该放在系统目录里面。
如果你此时实在不想放在系统目录,此时你可以为 OCX 设置你自己的目录,然后在注册表项里面设置绝对路径。
此时你引用的 .dll 如果仅仅是为 OCX 使用的,可以放在你期望放置的任何位置,但是绝对不是 C 所在位置,因为你不知道 C 是谁。
此时最好是像 OCX 那样放在 .dll 所在的目录或者是自己专门的目录。
此时在你的 OCX 加载这个 .dll 时候,使用绝对路径加载。这个绝对路径可以是静态的,也可以是动态的,但是你加载的时候,必须知道她到底在哪里。
如果你不能使用 LoadLibrary 手动加载,而是自动加载,那么使用 SetDllDirectory 设置加载路径。,
没有用loadlibrary,自动加载的,其实是用的bcg库的一个风格dll,BCGPStyle2010Blue2210.dll这个dll是在C加载ocx的时候在系统目录或者C的目录下找的,而不是在ocx的目录下找,
嗯 就是这样的 我查下怎么设置ocx的dll加载目录, 有个问题,是不是其它程序都是通过你的C运行程序来调用ocx的,还是直接调用OCX。但不管什么方式,只要是你的主进程调用ocx,只要把你的ocx依赖的dll库放到主进程目录下就可以了。, 你要约定啊,你告诉用户需要把dll防止在ocx同目录下,这样在用户的安装包中会按照这个处理的!, 在dllmian开始时设置setdlldirectory试试]
但是B.dll放到ocx的目录下,提示加载B.dll失败,我放到C程序运行目录就可以成功加载 , 用Depends看下你的C程序是不是也依赖B.dll了,
不依赖啊,是ocx在初始化的时候要调用B.dll,但是通过C程序调用ocx时,ocx就会在c程序目录找b.dll, 不科学,ocx依赖应该在ocx目录下找才对,莫非你是用LoadLibrary指定当前进程的相对路径?, 提示你一下,如果你的 C 在远程计算机上,难道你还要放在那个远方的电脑里。
所以最佳的做法是放在系统的目录,包括你的 .ocx 文件都应该放在系统目录里面。
如果你此时实在不想放在系统目录,此时你可以为 OCX 设置你自己的目录,然后在注册表项里面设置绝对路径。
此时你引用的 .dll 如果仅仅是为 OCX 使用的,可以放在你期望放置的任何位置,但是绝对不是 C 所在位置,因为你不知道 C 是谁。
此时最好是像 OCX 那样放在 .dll 所在的目录或者是自己专门的目录。
此时在你的 OCX 加载这个 .dll 时候,使用绝对路径加载。这个绝对路径可以是静态的,也可以是动态的,但是你加载的时候,必须知道她到底在哪里。
如果你不能使用 LoadLibrary 手动加载,而是自动加载,那么使用 SetDllDirectory 设置加载路径。,
没有用loadlibrary,自动加载的,其实是用的bcg库的一个风格dll,BCGPStyle2010Blue2210.dll这个dll是在C加载ocx的时候在系统目录或者C的目录下找的,而不是在ocx的目录下找,
嗯 就是这样的 我查下怎么设置ocx的dll加载目录, 有个问题,是不是其它程序都是通过你的C运行程序来调用ocx的,还是直接调用OCX。但不管什么方式,只要是你的主进程调用ocx,只要把你的ocx依赖的dll库放到主进程目录下就可以了。, 你要约定啊,你告诉用户需要把dll防止在ocx同目录下,这样在用户的安装包中会按照这个处理的!, 在dllmian开始时设置setdlldirectory试试]