这里针对COM组件注册失败出现过的问题进行总结。均为个人经验之谈。
提示“找不到指定的模块”,HRESULT:0X8007007E
考虑生成的DLL是不是缺了其他依赖的DLL,建议使用dumpbin.exe去看看你生成的DLL依赖了什么别的DLL。
以及用Everything去搜寻对应的DLL是否存在。
在exe执行的时候,DLL的遍历一般是从根目录下开始,找不到DLL则到C盘的system32上去找,用everything去看有没有对应的DLL,如果有,就不是缺这个。然后缺什么就补什么。
如果这种情况下,还是没解决问题,去下载一个Process Monitor,地址:Process Monitor - Sysinternals | Microsoft Learn
用筛选(Filter)指定Process Name为regsvr32.exe,然后Add之后Apply
点击Clear清空窗口后,点击Capture捕获,然后执行命令行regsvr32你所需要的DLL。
然后这会,ProcessMonitor已经显示出一片regsvr32.exe执行后的结果。这个时候把Capture关掉!!去找FILE NOT FOUND和PATH NOT FOUND,看里面的详情。就指定缺什么DLL,一般来说是缺的是你import的依赖库的DLL,把它补充到你的编译目录即可。否则看情况,是不是缺什么VC SDK等等。
看ProcessMonitor会比较费劲,但是最好仔细一点看,一般缺的DLL会有一片连续的FILE NOT FOUND和PATH NOT FOUND。
提示“找不到对应的程序”,同样提示HRESULT问题,触发断点的
这种情况下,和上面类似,应该就是缺系统DLL。最好把这个无法注册的COM对应的系统DLL都复制粘贴到这里。再试试。
最后还要检查一下:在注册表编辑器里,去搜索你要注册的这个DLL,看看路径参数什么的是否对应上,如果对应上了,则这个DLL的依赖项是完备了。problem solved