无法将.tlb导入我的DLL

时间:2012-09-18 10:56:32

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

我正在基于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编程的新手。 提前谢谢。

2 个答案:

答案 0 :(得分:2)

我不知道为什么_SYSTEMTIME在<Windows.h>中定义或由其引入的内容时重新定义。

无论如何,尝试从#import指令中删除no_namespaces。命名空间可以避免这些名称冲突。

答案 1 :(得分:1)

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

你从哪里得到这个图书馆?

您可以删除

  

no_namespace

但只有当类型库中的对象在其他命名空间中定义然后全局化时才有用。

您也可以只为导入指令

尝试一个属性
  

raw_interfaces_only

这取决于您想要从TLB实现/导入的内容。

MSDN docs