C++ 为什么我的DLL无法注册?
我正在VS2005中构建一个项目,我的几个DLL无法注册。我在Visual Studio中收到的错误消息是: 项目:错误PRJ0019:工具从“注册ActiveX控件…”返回错误代码 这很模糊。通过命令行手动注册DLL时(使用C++ 为什么我的DLL无法注册?,c++,com,dll,registry,C++,Com,Dll,Registry,我正在VS2005中构建一个项目,我的几个DLL无法注册。我在Visual Studio中收到的错误消息是: 项目:错误PRJ0019:工具从“注册ActiveX控件…”返回错误代码 这很模糊。通过命令行手动注册DLL时(使用regsv32.exe),出现以下错误: LoadLibrary(“test.ocx”)失败-由于应用程序配置不正确,此应用程序无法启动。重新安装应用程序可能会解决此问题 我在culprit.ocx文件上运行了Dependency Walker(dependence.exe
regsv32.exe
),出现以下错误:
LoadLibrary(“test.ocx”)失败-由于应用程序配置不正确,此应用程序无法启动。重新安装应用程序可能会解决此问题
我在culprit.ocx文件上运行了Dependency Walker(dependence.exe
),但它没有显示任何明显的问题
我也做了重建,但我仍然得到同样的问题
关于如何确定注册失败的原因,有什么建议吗?解决这类问题的最简单方法可能是安装 Process Montior允许您观察进程正在进行的系统调用,在这种情况下,您将能够看到某些系统调用是否失败。例如,如果您缺少依赖项,则CreateFile()调用将失败,文件名为DLL、OCX等
启动procmon并将筛选器配置为排除regsvr32.exe以外的事件,复制测试用例,然后检查日志。在返回值列中查找“名称未发现”错误。您是否有最有可能的原因是因为嵌入的清单。您应该使用资源管理器应用程序并检查DLL是否存在错误r嵌入的清单。可能是某个依赖DLL(或您的DLL)需要其他不存在的DLL的某些版本
我收到这样一条消息:“由于应用程序配置不正确,此应用程序无法启动。”如果嵌入式清单不匹配。您可以尝试以下几点:
- 尝试使用启用了fusion log的regsvr32(-它也适用于非托管DLL)。这将为您提供更多的信息,而不仅仅取决于加载的外部依赖项、它们从何处加载以及遇到的错误
- 将.ocx及其依赖项复制到根目录或一级文件夹中,然后尝试从那里注册。我不记得详细信息,但从太深的路径中注册COM dll时存在一个老问题
- 在下运行regsvr32。设置一个断点DllMain,看看它是否做了一些奇怪的事情
- 如果您从未中断WinDbg中的DllMain,请为dll设置一个断点,一旦它被命中,您可以单步执行LoadLibrary,或者只设置一个通用的LoadLibrary断点,然后检查每个dll
- ATL安全更新:
- 正在中断ATL中的更改:
- 这是一个必须阅读的: