gpt4 book ai didi

visual-studio-2010 - COM - #include 生成的 header 与 #import 生成的 tlb

转载 作者:行者123 更新时间:2023-12-04 23:05:22 31 4
gpt4 key购买 nike

我有许多生成 COM DLL 的项目,这些项目输出以下内容:

projectname_i.h
projectname_i.c
projectname_p.c
projectname_i.tlb

然后在另一个项目使用这个 DLL 的地方,它的使用方式如下:
#import "projectname.tlb" named_guids no_namespace

我想将其更改为使用包含而不是导入。

想要从 #import 更改的原因至 #include是因为我想启用 /MP编译器开关以加快构建时间。

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

所以我想知道的是:
  • 为什么 COM DLL 有一个 TLB 和一个 H?
  • 应该使用哪个,为什么?
  • 使用#include 和#import 有什么区别?切换到#include 会有什么不可预见的后果吗?
  • 最佳答案

    Why do COM DLLs have a TLB and a H?



    生成的 _i.h文件包含您在 IDL 文件中以 C 或 C++ 编译器可用的格式编写的声明。 .tlb file 是一个类型库,它包含格式为任何支持 COM 的语言都可以使用的 IDL 声明。它作为资源嵌入到 COM 服务器 DLL 中。任何使用您的 COM 服务器的人都将需要它。如果您不构建代理/ stub DLL,那么在运行时可能还需要它来编码跨单元的调用。

    What is the difference between using #include vs #import?



    只要客户端是用 C 或 C++ 编写的,#包括 _i.h文件足以获得使用服务器的必要声明。但是请注意,#import 指令做得更多,它会自动生成 .tlh.tli在客户端代码中获得#included 的文件。这些文件为 COM 服务器中的接口(interface)声明智能指针类型,使其成为 的类型。批号更容易使用服务器。在文本编辑器中打开这些文件以查看它们包含的内容。如果您的客户端代码使用 XxxxPtr 类型或捕获从错误返回代码自动生成的 _com_error 异常,那么如果您不想使用 #import 指令,那么您正在考虑对客户端代码进行非常实质性的重写。

    如果 COM 服务器稳定并且其接口(interface)声明不再更改,那么您可以 checkin .tlh 和 .tli 文件并将这些文件的 #import 替换为两个 #include。请务必在代码中留下注释,向维护者展示如何重新生成文件,“永不更改”是一个难以实现的目标。而且,当然,如果您尝试使/MP 有效,则此技巧是不合适的,这表明 COM 服务器仍在更改。

    关于visual-studio-2010 - COM - #include 生成的 header 与 #import 生成的 tlb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13700266/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com