2013-03-13 51 views
5

我有一个tlb文件,其中包含一些我需要使用的函数声明。如何在本地C++项目中使用tlb文件

如果我使用

#import "type_library.tlb" 

我可以correclty从我的代码中引用的函数:

tlb_namespace::required_function(); 

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

我该如何成功构建这种类型的项目?

编辑

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

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

我也注意到,失败函数在TLB中这样宣称:

UPPER_function_name 

,但在DLL中的声明如下:

Upper_function_name 

可这是问题?

是否有可能解决这种类型的错误,直接修改二进制tlb文件或DLL?

+0

是'#进口 “type_library.tlb” '在你的项目中这个tlb唯一的#import指令。它是否与函数调用驻留在相同的cpp中?如何在生成的.tlh和.tli文件中定义'required_function'? – 2013-03-13 10:18:04

+0

@ZdeslavVojkovic现在的项目是一个非常简单的项目,因此#import只是一个,它驻留在调用的同一个.cpp文件中。我试图生成.tlh和.tli文件......只有当我去项目属性\预处理器生成预处理文件时才显示它们。但是,我可能不会将它们以正确的模式添加到项目中,因为如果我这样做,我会得到另一个链接器错误。 – sblandin 2013-03-13 10:54:08

+0

您不必添加它们。它们将在构建发布/调试文件夹期间创建,因此请在那里查找它们。 – 2013-03-13 11:01:42

回答

3

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

在IDE:视图 - >对象浏览器,点击“...”编辑自定义组件集,浏览你的TLB文件,并添加到浏览信息。

确认用于的命名空间。

+0

对于迟到的反馈意见很抱歉。如果我在对象浏览器中打开tlb文件,我将它看作一个包含单个名称空间的库,其中包含许多将某些函数分组的模块。当我在本地C++项目中导入tlb时,我得到一个仅包含函数的名称空间。正如我之前所说的在VBA项目中添加对tlb的引用允许我调用函数,但是在本机C++项目中,我会收到链接器错误。 – sblandin 2013-03-22 11:09:10

0

使用的命名空间来解决连接错误: 例如:#进口 “<>” raw_interfaces_only 使用命名空间<>

这将解决此问题

相关问题