【问题标题】:how to import a tlb file programmatically in c++?如何在 C++ 中以编程方式导入 tlb 文件?
【发布时间】:2010-11-14 15:54:55
【问题描述】:

目前我使用的是语句:

 #import "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\test.tlb" named_guids

但我以编程方式获取文件夹路径。即"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727"

我必须从此路径加载test.tlb,该路径驻留在变量folderpath 中。我必须通过连接folderpath+test.tlb 以编程方式导入 tlb。我该怎么做?

【问题讨论】:

  • 这看起来很像stackoverflow.com/questions/1108537/…的骗子
  • 你想要完成的任务是什么?
  • 为什么你自己编译的项目的tlb在.NET目录下?它是如何到达那里的?
  • 因为这是硬编码来删除这个硬编码我问这个。
  • 创建 tlb 和将程序集注册为 COM 服务器是不相关的。您也可以使用在程序集编译期间生成的 tlb 并在没有 /tlb 参数的情况下注册组件。这样一来你就不会有这个问题了。

标签: c++ visual-c++ com typelib


【解决方案1】:

如果有帮助,您可以指定 prog ID,例如:

#import "progid:Outlook.Application" named_guids

这使用硬编码路径。

【讨论】:

  • 我该怎么做。假设我的 c# 命名空间是 TestNm 接口是 ITest 类是 SqlClass 最后我的 tlb 是 Test.tlb 那么 #import "progid:Test.tlb" 是正确的......
  • #import "Guid:35145a33-e434-49dc-92cf-e056c508525a" named_guids 我试过这样。但它显示无法打开库“Guid:35145a33-e434-49dc-92cf-e056c508525a”没有这种类型的库
  • 我试过#import "progid:Test.SqlClass" 但出现错误请注意stackoverflow.com/questions/1195353/…
  • 你注册类型库了吗?除非您先这样做,否则您将无法通过 GUID 或 progid 访问它。
【解决方案2】:

要在运行时以编程方式加载 TLB 文件(COM 类型库),您可以使用 LoadTypeLibraryEx

应将在编译时导入的 TLB 复制到众所周知且一致的位置,以便在 bild 期间找到它。如果您在团队环境中工作,您可能希望将 TLB 检入您的 SCM 系统,以便每个人都从相同的相对位置引用相同版本的 TLB 文件。

此外,TLB 所在的路径可以作为包含目录提供给编译器(与用于头文件的路径相同)。

【讨论】:

    猜你喜欢
    • 2023-03-11
    • 2019-02-12
    • 2019-11-24
    • 1970-01-01
    • 2013-05-01
    • 2019-06-10
    • 1970-01-01
    • 1970-01-01
    • 2016-10-23
    相关资源
    最近更新 更多