我正在尝试导入如下文件:
#import "francais.dll"
它告诉我它无法打开源文件“C:/xxxx/Proj/Release/francais.tlh”
库文件存在于Proj。
中如何解决?
答案 0 :(得分:10)
它不是“库文件”,它是一个COM服务器。 #import指令从嵌入在francais.dll中的类型库自动生成.tli和.tlh文件。没有明显的原因导致它无法加载.tlh文件,该DLL可能有问题。很难从这里看到。确保您没有忽略先前的错误,从错误列表窗口的顶部开始。
作为基本检查,您可以自己查看该类型库。从Visual Studio命令提示符运行OleView.exe并使用文件+视图Typelib,选择该DLL。您需要查看类型库的内容,并将其反编译为IDL。
您也可以在VS中看到它,使用File + Open + File并选择DLL。您将看到DLL中嵌入的资源,需要一个标记为“TYPELIB”的节点,其中一个资源的ID为1,即实际类型库。如果这两个验证出现任何问题,那么#import指令也不太可能正常工作。
请注意,尝试在Release目录中找到该文件很奇怪。您通常始终以调试配置开始。
答案 1 :(得分:9)
您需要将.lib添加到项目属性中。你有一个.lib与DLL一起使用吗?处理类似问题的另一个问题可以在这里找到:How do I use a third-party DLL file in Visual Studio C++?
需要注意的主要事项是,您是否有.lib
与您的DLL一起使用。我之前做过的另一件事,但我不完全建议将DLL复制到与可执行文件相同的目录中。每当加载DLL时,Windows都会自动检查可执行文件所在的路径。
1)在菜单栏(窗口顶部)上点击project
- > properties
(或alt + f7)。
2)打开配置properties
- > linker
。然后在general
标签中,将目录添加到"Additional Library Directories"
。
3)然后点击input
下方的general
,并将lib的名称添加到"Additional Dependencies"
答案 2 :(得分:3)
如果您坚持将Dll与您可以使用的代码耦合(不是VS的所有编译器支持):
#pragma comment(lib, "path_to_lib\\libname.lib")
对COM库使用#import
而不是标准Dll
答案 3 :(得分:0)
我在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")