由项目生成的.ocx(.dll)文件注册时的报错:模块加载失败,请确保该二进制存储在指定路径中--已解决
简而言之,如果你要注册的这个A.dll(.ocx同理,下略)的代码里引用了其他dll文件,如B.dll,那么在注册时就要把A.dll和B.dll都放在同一目录下,或是regsvr32.exe所在目录下(一般是“C:\Windows\SysWOW64”和“C:\Windows\System32”)然后以管理员命令行运行"regsvr32 A.dll"命令即可成功。因为安装包中的.ocx文件和它所依赖
从一个现成的项目中生成了.ocx文件,使用命令行(管理员)命令 “regsvr32 {.ocx绝对路径}” 注册,报错:

解决方法:
简而言之,如果你要注册的这个A.dll(.ocx同理,下略)的代码里引用了其他dll文件,如B.dll,那么在注册时就要把A.dll和B.dll都放在同一目录下,或是regsvr32.exe所在目录下(一般是“C:\Windows\SysWOW64”和“C:\Windows\System32”)然后以管理员命令行运行"regsvr32 A.dll"命令即可成功。
即要把A.dll引用的所有dll文件和A一起放在同一目录下运行regsvr32命令。
另:对于A.dll所引用项的查找,项目中大概率有,代码中应当也能找到对应的引用语句(如import)。实在找不到,可以使用工具Dependency Walker,该软件能查找程序(.dll .exe等)的依赖项。工具免费且小巧,可以直接搜索到。
原理分析:
推测regsvr32命令在执行时,会首先读取A.dll的所有依赖项,并在A.dll所在目录和regsvr32.exe所在目录下分别检索是否存在依赖项。若无依赖项,则会报上述错误;若检索到了全部依赖项,则注册命令可成功执行。
问题记录:
一开始我也尝试了很多网上找到的其他办法,但由于我的.ocx文件是由现成的项目生成的,所以那些系统dll文件报错的解决方案都是无效的,比如把ocx文件复制到“C:\Windows\SysWOW64”等路径下,或者是根据电脑位数调用不同文件夹下的regsvr32.exe等等,尝试无果。直到看到一篇大佬的文章,尝试了他的方法,果然成功了。
我的项目中带有一个安装包,安装包中的.ocx文件可以注册成功,而项目生成的.ocx文件不能成功。因为安装包中的.ocx文件和它所依赖的.dll文件放在了一起,而项目生成的.ocx文件是单独放在一个文件夹中的,没有依赖的.dll文件,所以失败。
于是我把安装包中的dll文件都复制到了“C:\Windows\SysWOW64”文件夹下,然后再注册项目生成的.ocx文件,成功。
更多推荐




所有评论(0)