ATL COM DLL 寄存器错误 0x80070716

Posted

技术标签:

【中文标题】ATL COM DLL 寄存器错误 0x80070716【英文标题】:ATL COM DLL REGISTER ERROR 0x80070716 【发布时间】:2014-12-24 04:14:11 【问题描述】:

在 Win7 x64 下使用 ATL Dll x64 完成 regsvr32 时出现错误 0x80070716。

我在提出问题之前进行了搜索,并使用其他网站上的一些线程进行了验证,例如这个http://www.tek-tips.com/viewthread.cfm?qid=1085835 和另一个这里是http://forums.codeguru.com/printthread.php?t=366207。 但是那些线程并没有解决我的问题。

如果有人可以帮助我,请告诉我。

【问题讨论】:

对于对我的问题投反对票的机构,至少为其他成员解释一下,如果不是对我来说,这不鼓励在本网站进行合作 【参考方案1】:

我将分享我的解决方案,也许它会在未来帮助一些人:

1) 在工作区菜单栏中选择“ResourceView”选项卡。

2) 右键单击​​注册失败组件的资源文件夹。

3) 选择“资源符号...”菜单选项。

4) 删除所有未使用的符号并关闭。

当我构建项目时,我收到错误 error C2065: IDR_<MYWrongIDRegistryClass> : undeclared identifier;在DECLARE_REGISTRY_RESOURCEID 所以:

5) 将IDR_<MYWrongClass> 替换为IDR_<MYCorrectIDRegistryClass>

这些步骤使我的 ATL COM DLL 在我构建后成功注册。

希望这对面临同样问题的人有所帮助。

【讨论】:

有趣的是,在将另一个 COM 类添加到库中之前我没有出现此错误。但最终问题的原因是未使用的 IDR 而是另一个类。无论如何,这个解决方案帮助了我,并且可以帮助那些在库中引入新的 COM 类后开始出现 0x80070716 错误的人。【参考方案2】:

导致此类错误的另一个可能原因是资源文件中缺少 .rgs 文件的条目,即 .rc

每个 .rgs 文件必须在 .rc 的 REGISTRY 部分中引用,如下所示:

IDR_MYRESOURCE REGISTRY "myresource.rgs"

要以文本模式打开您的 .rc 文件,请在解决方案资源管理器的上下文菜单中使用“查看代码”命令。

【讨论】:

以上是关于ATL COM DLL 寄存器错误 0x80070716的主要内容,如果未能解决你的问题,请参考以下文章

atl.dll已加载,但对dllregisterserver的调用失败,错误代码0x8002801c怎么办

非 MFC ATL 项目 (dll) 产生 MFC 相关错误

ATL 结构在来自 dll 的 COM 对象上中断

旧 c 代码到 ATL/COM dll

ATL COM dll 中的缓冲区溢出

为 32 位 DLL 编写 COM/ATL Wrapper 的正确方式