我们有大型C++项目,我们用它来编译/ MP交换机以利用多个内核.
但是,我们最近引入了一些在几个tlb上使用#import的代码,而#import与/ MP不兼容,这意味着我们回到单线程构建和更多时间来获取咖啡.
关于如何让#import和/ MP玩得好的任何建议?是否有一个工具可以从#import静态生成C++标头作为预构建步骤?
更新:
以下马特的建议很有效.对于其他在谷歌上绊倒这个的人:
创建一个单独的静态lib项目
设置足够的包含,以便您可以将该#import
语句放在lib项目中
使您的主项目依赖于lib项目(以确保正确的构建顺序)
将lib项目的临时构建文件夹添加到主项目的包含路径
#include
.tlh
您正在执行的生成的文件#import
启用/MP
开关并失去咖啡休息时间......
小智.. 25
为什么不只是#include
生成的头文件#import
?
为什么不只是#include
生成的头文件#import
?
(我对这个问题有点迟了,但这是我心中的一个问题.)
您可以尝试使用旧式的方式从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回答所暗示的内容.
您可以将/ MP选项作为整体使用,然后使用/ MP1选项对单个文件进行例外处理.