7

我正在尝试导入如下文件:

#import "francais.dll"

它对我说它无法打开源文件“C:/xxxx/Proj/Release/francais.tlh”

库文件存在于 Proj 中。

如何解决?

4

4 回答 4

11

它不是一个“库文件”,它是一个 COM 服务器。#import 指令从 francais.dll 中嵌入的类型库自动生成一个 .tli 和一个 .tlh 文件。它无法加载该 .tlh 文件没有明显的原因,该 DLL 可能有问题。从这里很难看到。请确保您没有忽略早期的错误,从错误列表窗口的顶部开始。

作为一项基本检查,您可以自己查看该类型库。从 Visual Studio 命令提示符运行 OleView.exe 并使用 File + View Typelib,选择该 DLL。你需要查看类型库的内容,反编译成IDL。

您也可以在 VS 本身中看到它,使用 File + Open + File 并选择 DLL。您将看到嵌入在 DLL 中的资源,需要有一个标记为“TYPELIB”的节点,其中一个 ID 为 1 的资源是实际的类型库。如果这两个验证出现任何问题,那么 #import 指令也不太可能起作用。

请注意,它尝试在 Release 目录中查找文件很奇怪。您通常总是从调试配置开始。

于 2013-10-15T15:48:39.713 回答
9

您需要将 .lib 添加到项目属性中。你有 .lib 与 DLL 一起使用吗?可以在此处找到另一个处理类似问题的问题:如何在 Visual Studio C++ 中使用第三方 DLL 文件?

需要注意的主要事情是您是否需要.lib与您的 DLL 一起使用。我之前做过但不完全推荐的另一件事是将 DLL 复制到与可执行文件相同的目录中。每当加载 DLL 时,Windows 都会自动检查可执行文件所在的路径。

1)在菜单栏(窗口顶部)上单击project-> properties(或 alt+f7)。

项目属性

2)打开配置properties-> linker。然后在general选项卡中,将目录添加到您的"Additional Library Directories".

包括目录

3)然后单击input右下方general并将lib的名称添加到"Additional Dependencies"

附加库

于 2013-10-15T15:05:55.380 回答
4

如果您坚持将您的 Dll 与您可以使用的代码耦合(并非所有编译器都支持,VS 支持):

#pragma comment(lib, "path_to_lib\\libname.lib")

用于#importCOM 库而不是标准 Dll

于 2013-10-15T15:48:29.927 回答
1

我在 Visual Studio 2015 中遇到了与 COM 服务器 MSO.DLL(MS Office 14 / 2010)类似的问题。

(红色)IntelliSense 警告在首次构建/编译后消失!我真正的问题是确切的路径。我不得不手动编写它。复制/粘贴 vom Explorer 不起作用。

#import "C:\Program Files\Common Files\microsoft shared\OFFICE14\MSO.DLL" no_implementation rename("RGB", "ExclRGB") rename("DocumentProperties", "ExclDocumentProperties") rename("SearchPath", "ExclSearchPath")
于 2017-10-10T13:09:08.573 回答