替换Visual C++中的#import

Rob*_*ker 29 com visual-c++

我们有大型C++项目,我们用它来编译/ MP交换机以利用多个内核.

但是,我们最近引入了一些在几个tlb上使用#import的代码,而#import与/ MP不兼容,这意味着我们回到单线程构建和更多时间来获取咖啡.

关于如何让#import和/ MP玩得好的任何建议?是否有一个工具可以从#import静态生成C++标头作为预构建步骤?

更新:

以下马特的建议很有效.对于其他在谷歌上绊倒这个的人:

  1. 创建一个单独的静态lib项目
  2. 设置足够的包含,以便您可以将该#import语句放在lib项目中
  3. 使您的主项目依赖于lib项目(以确保正确的构建顺序)
  4. 将lib项目的临时构建文件夹添加到主项目的包含路径
  5. #include.tlh您正在执行的生成的文件#import
  6. 启用/MP开关并失去咖啡休息时间......

Mat*_*son 25

为什么不只是#include生成的头文件#import


Aar*_*ark 8

(我对这个问题有点迟了,但这是我心中的一个问题.)

您可以尝试使用旧式的方式从C/C++访问COM对象.这涉及COM对象的开发人员提供具有COM接口的C/C++版本的客户端.h文件.这些文件看起来像#import的简单版本.

这些文件来自哪里?如果COM对象是用C/C++(VC++)编写的,那么这些对象来自MIDL编译器.此命令行工具获取ODL/IDL文件并从中创建C/C++源代码.它发出的一些内容对客户端应用程序很有用.

如果你有COM对象的源代码,那么你可能已经有了这些文件!

如果您只有TLB文件,则可以使用OLE/COM对象查看器(OLEVIEW.exe - 至少附带VC++ 6.0),打开类型库和save-as和OLD/IDL文件.然后运行MIDL编译器以生成客户端C/C++包含文件.第三方COM对象可能会附带这些文件的可能性很小,但它们通常不会(我记得Crystal Reports 已经做了一段时间,然后停止了它们的运送 - 我们皇室成功 - 但我离题了).

使用带有MIDL创建的接口类的ATL智能指针(和其他支持类)几乎与#import创建的一样好.这取决于您使用的#import特定功能的数量.

对于/ MP我已经完成了我所建议的和一些被接受的Matt Davison回答所暗示的内容.


Dim*_* C. 7

您可以将/ MP选项作为整体使用,然后使用/ MP1选项对单个文件进行例外处理.