0

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

  • C/C++ -> General -> Additional Include Directories - 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 编程很陌生。提前致谢。

4

2 回答 2

2

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

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

于 2012-09-18T11:08:00.427 回答
1

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

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

你可以删除

no_namespace

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

您也可以只尝试导入指令的一个属性

raw_interfaces_only

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

MSDN文档

于 2012-09-18T11:02:45.073 回答