当前位置:  开发笔记 > 编程语言 > 正文

替换Visual C++中的#import

如何解决《替换VisualC++中的#import》经验,为你挑选了3个好方法。

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

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

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

更新:

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

    创建一个单独的静态lib项目

    设置足够的包含,以便您可以将该#import语句放在lib项目中

    使您的主项目依赖于lib项目(以确保正确的构建顺序)

    将lib项目的临时构建文件夹添加到主项目的包含路径

    #include.tlh您正在执行的生成的文件#import

    启用/MP开关并失去咖啡休息时间......

小智.. 25

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



1> 小智..:

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



2> Aardvark..:

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

您可以尝试使用旧式的方式从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回答所暗示的内容.



3> Dimitri C...:

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

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有