在 C++ 应用程序中使用 DLL

Posted

技术标签:

【中文标题】在 C++ 应用程序中使用 DLL【英文标题】:Working with DLL in a C++ application 【发布时间】:2012-03-19 06:50:59 【问题描述】:

我打算在我的应用程序中使用id3lib。我正在寻找一种将库用作 DLL 的方法。我注意到他们以各种形式发布了该库:其中之一是 windows binary。我在 Windows 中的目标平台,我将使用 Qt 4.8。在我解压 Windows 二进制文件后,我在 Release 文件夹中找到了以下文件:

id3lib.dll id3lib.exp id3lib.lib

我知道如何在 Qt 中使用 DLL,给定 DLL、一个或多个函数原型所在的头文件,以及有或没有 *.lib 文件。这个包不带头文件。

我应该如何在没有任何头文件的情况下使用这个包? *.lib 和 *.exp 文件的目的是什么?据我所知,*.lib 文件用于与我的程序中不需要的函数进行静态链接。

【问题讨论】:

您的问题是特定于 Windows 的,应该这样标记。 @BasileStarynkevitch:是的,对不起,我忘了。 【参考方案1】:

您刚刚错过了标题。它位于 include 子文件夹下(请参阅 here),即使您将使用 DLL,仍然需要 .lib 文件进行链接。

【讨论】:

我有id3lib的完整源代码。 windows 二进制部分不附带任何头文件。我怎么知道我应该使用哪个头文件? @Donotalo:点击罗伯特答案中的链接。它带你直接到 id3.h。 @HarryJohnston:id3.h 不是要包含的文件。它是此处描述的 tag.h:id3lib.sourceforge.net/api/index.html。但是,我尝试了它们,但仍然无法解决一些未引用的链接。 @Donotalo:您是从编译器还是从链接器收到错误消息?哪些功能/符号未定义? @HarryJohnston:这是另一个问题:***.com/questions/9786022/…【参考方案2】:

通常的做法是在C++文件中使用#included头文件,链接到.lib文件,运行时需要.dll。

头文件应该/可能在另一个包中,因为同一个头文件可能用于不同类型的链接策略。

在最坏的情况下,您应该能够使用诸如depends.exe 之类的工具来查看导出的符号并创建您自己的h 文件以进行匹配 - 但最好找到随发行版发布的.h 文件。

【讨论】:

以上是关于在 C++ 应用程序中使用 DLL的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 运行时组件中的 Windows Phone 8.1 XAML 应用程序中使用 C++ dll

无法在某些 PC 中运行 c#application(使用 c++ dll)

在 C# WPF 或 Windows 窗体应用程序中使用 DirectX c++ DLL

在 VB6 应用程序中使用 C++ DLL

从 C++ 调用 dll 函数

使用 C++ 应用程序加载 dll