【问题标题】:How to use tlb files in a native C++ project如何在本机 C++ 项目中使用 tlb 文件
【发布时间】:2013-03-01 03:49:12
【问题描述】:

我有一个 tlb 文件,其中包含一些我需要使用的函数声明。

如果我使用

#import "type_library.tlb"

我可以从我的代码中正确引用该函数:

tlb_namespace::required_function();

但是当我编译项目时,链接器说 tlb_namespace::required_function 是一个未解析的外部符号。

我怎样才能成功构建这样的项目?

编辑:

我在一个虚拟 VBA 访问项目中使用了相同的类型库。我已经添加了对类型库的引用,并且我注意到类型库中包含的一些函数被正确调用。但其中一些不是。 VBA 说它无法在相关的 dll 中找到它们的入口点。

这可以解释构建 c++ 应用程序时未解析的外部符号吗?

我还注意到失败的函数在 tlb 中声明如下:

UPPER_function_name

但在 dll 中是这样声明的:

Upper_function_name

这可能是问题吗?

这种错误直接修改二进制tlb文件或者dll是否可以解决?

【问题讨论】:

  • 是 #import "type_library.tlb" 项目中此 tlb 的唯一 #import 指令。它是否与函数调用位于同一个 cpp 中?生成的 .tlh 和 .tli 文件中如何定义required_function?
  • @ZdeslavVojkovic 目前的项目是一个非常简单的项目,所以#import 只是一个,它驻留在调用的同一个 .cpp 文件中。我试图生成 .tlh 和 .tli 文件......它们只有在我转到项目属性\预处理器生成预处理文件时才会出现。但是我可能不会以正确的模式将它们添加到项目中,因为如果这样做,我会收到另一个链接器错误。
  • 您不必添加它们。它们将在构建期间在您的发布/调试文件夹中创建,因此请在此处查找它们。
  • 文件已创建,但现在链接器说:“找不到 .\Debug\stdafx.obj
  • 显然,您还有其他一些问题。尝试全部重建,如果仍有错误,请发布完整的构建日志。很难说这种方式

标签: visual-c++ com visual-studio-2005


【解决方案1】:

使用IDE查看TLB信息。
使用此帮助:How to: View Type Library Information

在 IDE : View-> Object Browser,单击“...”编辑自定义组件集,浏览您的 TLB 文件并添加以查看信息。

确认使用的命名空间。

【讨论】:

  • 抱歉反馈迟了。如果我在对象浏览器中打开 tlb 文件,我会将其视为一个包含单个命名空间的库,其中包含多个模块,这些模块将一些功能分组。当我在本机 C++ 项目中#import tlb 时,我得到一个仅包含函数的命名空间。正如我之前所说,在 VBA 项目中添加对 tlb 的引用允许我调用函数,但在本机 C++ 项目中,我得到链接器错误。
【解决方案2】:

使用命名空间解决链接器错误: 例子: #import "" raw_interfaces_only 使用命名空间

这将解决问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多