2

环境:VS2008,C++ ATL COM,64Bit,Windows 7

我正在尝试从较旧的 COM 接口中删除一个方法。我修改了 *.idl,修改了相关的 *.h 和 *.cpp 实现文件,并将其从主项目的 .h 文件中删除。我可以在整个项目中搜索旧方法名称 - 不显示并且编译/链接很好。但是,如果我随后使用对象浏览器查看已编译的 DLL - dang 方法仍然存在!如果我在 .NET 项目中“引用”DLL - 显示该方法。如果 .NET 代码尝试使用该方法 - 它会出现内存异常(这是有道理的)。我一辈子都想不出如何修改 IDL、删除方法代码并让生成的编译 DLL 正确。

该方法到底隐藏在哪里,是否有其他方法可以从现有的 ATL 生成的 COM 接口中删除方法?我难住了!谢谢!

4

1 回答 1

3

您是否取消注册旧的 DLL 模块并注册新的?听起来您的注册表可能有不一致的条目。

还要确保周围没有预编译的头文件等,以便在编译时确定它没有包含一些旧副本。

最好的办法是在编译之前删除完整的构建目录(调试/发布),以防您错过删除一些旧文件。

还要检查 .dll 的加载路径,您可以在对象浏览器中看到,将其与注册表项进行比较。也许你以前做过32位版本?

于 2011-03-10T04:09:22.240 回答