【问题标题】:Can't import a .tlb to my DLL无法将 .tlb 导入我的 DLL
【发布时间】:2012-09-18 10:56:32
【问题描述】:

我正在 Visual Studio 2008 中基于第三方 SDK 创建一个 C++ MFC DLL。SDK 提供了一个 TLB 文件夹、一个 Lib 文件夹(仅限 .lib)、一个 Include 文件夹(仅限 .h 和 .hpp)和一个Bin 文件夹(一些 exes、DLL 和 .ax 文件)。我尝试通过以下方式将 SDK 库链接到我的 DLL:

  • C/C++ -> 常规 -> 附加包含目录 - Bin、Include 和 TLB 文件夹(以防万一);
  • 链接器 -> 常规 -> 附加库目录 - Lib 和 Bin;
  • 链接器 -> 输入 -> 附加依赖项 - Lib 文件夹中的 .lib

由于链接问题(未声明的标识符等),这样做会导致编译错误,因此我为 TLB 添加了一个导入行:

#import "C:\Path\To\Tlb.tlb" raw_interfaces_only, raw_native_types, no_namespace, named_guids

这会弹出另一个关于类型重定义的编译错误:

error C2011: '_SYSTEMTIME' : 'struct' type redefinition

我错过了什么?我对 Windows 编程很陌生。 提前致谢。

【问题讨论】:

    标签: c++ visual-studio-2008 dll sdk mfc


    【解决方案1】:

    我不知道为什么在<Windows.h>中定义的_SYSTEMTIME被重新定义或它带来的东西。

    无论如何,请尝试从#import 指令中删除 no_namespaces。命名空间的存在是为了避免此类名称冲突。

    【讨论】:

    • 非常感谢。我把它拿出来并搜索了命名空间,以便在我的代码中使用它。它现在编译并运行。
    【解决方案2】:

    您尝试导入暴露已定义对象的类型库。

    你从哪里得到这个库的?

    你可以删除

    no_namespace

    但只有在类型库中的对象是在其他命名空间中定义时才可能有帮助,然后是全局的。

    你也可以只为导入指令尝试一个属性

    raw_interfaces_only

    这取决于你想从 TLB 实现/导入什么。

    MSDN docs

    【讨论】:

      猜你喜欢
      • 2011-08-15
      • 2013-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-15
      • 1970-01-01
      • 2017-02-06
      • 1970-01-01
      相关资源
      最近更新 更多