【发布时间】:2012-06-07 12:08:30
【问题描述】:
我正在处理一个相当大的项目,该项目主要使用 MFC 用 C++ 编写。我们的任务是逐步移植这个应用程序以使用 Qt。多年前,我们的大部分功能的包装器都是使用 COM 编写的。我觉得使用新 Qt 代码中的 COM 包装器将有助于隔离强制依赖 MFC 的代码。不幸的是,我们还被要求减少对 COM/ActiveX 的使用。因此,在 Qt 中引入我们的 COM 包装器的新消费者并不理想。 Visual Studio 有一个类向导,它将基于 TLB 文件中的接口生成 C++ 类,但它依赖于 MFC,并且接口仍然公开 COM(LPDISPATCH、SAFEARRAY* 等)。
说了这么多,有没有人知道一个工具(免费或商业)可以获取 Microsoft IDL 文件并将其转换为 C++,谁的接口不依赖于 MFC 或 COM?
【问题讨论】:
-
你不应该做的事情,第 1 部分:joelonsoftware.com/articles/fog0000000069.html
-
不,普遍采用的二进制接口标准不会在树上生长。 Qt 做得很好,但它肯定不是通用的。
-
我不想扔掉代码。我想重用它,但避免在新实现中添加对“遗留”技术的直接依赖。我也不关心二进制兼容性,我只想要一个带有包装库的标头集合来链接,而不是直接导入 TLB 和处理 COM 接口。
-
你已经有了头文件,midl.exe 从 IDL 生成它们。目前尚不清楚为什么您依赖类型库,它们仅在无法处理 .h 文件的语言中需要。但在代码生成器中使用肯定很方便,包括 MFC 向导和#import 指令。通常,您正在尝试修补使应用程序的主要功能组件协同工作的粘合剂。更换胶水需要付出很多代价,所有东西都无法协同工作。
-
也许我不清楚。现在我们在新的 Qt 组件中使用
#import和 TLB,并使用midl.exe生成的代码。这意味着在我们的 Qt 项目中对QueryInterface()的一些引用、与 COM 的 GIT、_bstr_t 等进行编组。我们的系统架构师了解了我们的方法,并建议我们找到一种方法,不要将这些特定于 COM 的内容添加到我们的新 Qt 项目中。我在 Studio 中提到的类向导似乎正是我想要的方法,除了它生成特定于 MFC 的代码。我只是希望存在一个类似的工具来创建更标准的 C++ 友好代码......