1

我正在做一个相当大的项目,主要是使用 MFC 用 C++ 编写的。我们的任务是逐步移植这个应用程序以使用 Qt。多年前,我们的大部分功能的包装器都是使用 COM 编写的。我觉得使用新 Qt 代码中的 COM 包装器将有助于隔离强制依赖 MFC 的代码。不幸的是,我们还被要求减少对 COM/ActiveX 的使用。因此,在 Qt 中引入我们的 COM 包装器的新消费者并不理想。Visual Studio 有一个类向导,它将基于 TLB 文件中的接口生成 C++ 类,但它依赖于 MFC,并且接口仍然公开 COM(LPDISPATCH、、SAFEARRAY*等)。

综上所述,有没有人知道一个工具(免费或商业)可以获取 Microsoft IDL 文件并将其转换为 C++,谁的接口不依赖于 MFC 或 COM?

4

2 回答 2

1

并使用由 midl.exe 生成的代码

那是挂机第一。Midl.exe 不生成代码,它只生成声明。C++ 中的纯虚拟类,只有没有实现的方法声明。到 .h 文件或 .tlb 类型库文件。类型库很方便,因为它很容易被工具读取,它有一个受限的 COM 子集,称为自动化。并由 Windows 上的几乎任何语言运行时实现。

关键是这些只是声明,使用不同模块和/或不同语言或类库编写的代码协同工作的粘合剂。 在大型项目中非常重要,接口将各个部分联系在一起。

我们的系统架构师了解了我们的方法,并建议我们找到一种方法,不要将这些特定于 COM 的内容添加到我们的新 Qt 项目中。

这是非常无益的建议。“不要那样做”是我的医生告诉我,当我的手臂放在背后很痛时。我可以忍受,我有一个很好的选择,可以转身。在你的情况下,我不得不对建筑师提出更多要求。他在弄乱身体部位,他把躯干与腿、头、脚和手分开。大脑彻底脱节。使您现在拥有的不同代码块一起工作的粘合剂。破坏该界面,您将严重破坏您的应用程序,Netscape 风格。

当心宇航员建筑师(另一个 Spolsky 的最爱),他很乐意强迫你去做理解但不必实施的事情。需要一个合理的替代方案,一种架构方法,因为破坏接口会对您的应用程序产生深远的架构影响。当您更改接口时,每个人都从接口实现的那些 MFC 类几乎是垃圾。将它们全部重写为 Q 类会严重地让你在一段时间内无法工作。并且编写非常无聊的代码。只是为了生产同样的东西,但有更多的错误。你不应该做的事情,第 2 部分。

于 2012-06-02T21:21:25.070 回答
0

如果您能够继续使用 Visual C++,一个解决方案是使用对 COM 的普通编译器支持。

你需要#import你的TLB文件

http://msdn.microsoft.com/en-us/library/8etzzkb6%28v=vs.100%29.aspx

然后您可以利用 COM 编译器支持来处理 COM 对象实例,

http://msdn.microsoft.com/en-us/library/h31ekh7e.aspx

于 2012-06-02T19:57:49.660 回答