【问题标题】:How do I include my C++ DLL in a separate project?如何将我的 C++ DLL 包含在单独的项目中?
【发布时间】:2012-12-13 19:35:04
【问题描述】:

这个问题可能看起来很明显,但我遇到了很多麻烦,经过大量搜索后,我最终不得不在这里发帖。

我目前打开了两个 Visual Studio 窗口。一个是导出一个类的 Win32 Console->DLL 项目,在输出目录中我有:

  • .dll 文件
  • .exp 文件
  • .pdb 文件
  • .lib 文件

我已将 DLL 文件放入我的另一个项目的输出目录中,就像我对所有 DLL 所做的那样,这通常可以正常工作。然后,我将该目录添加到链接器的库目录中。

但与我使用的大多数库不同,我认为我做错了什么或者我误解了它的工作原理,我没有 .h[pp] 文件,所以我不知道应该如何将这些函数包含到我的代码。我宁愿不使用仅限 Windows 的 hack(我只想将其限制在 DL​​L 项目中,以便可以轻松移植)。

谁能告诉我我做错了什么?

【问题讨论】:

    标签: c++ dll visual-studio-2012


    【解决方案1】:

    没有什么“hacky”或“windows”特定于让 .h 文件可用于其他项目。您的 .lib 文件将提供完成构建所需的信息。见:How do I use a third party dll in Visual Studio C++?

    【讨论】:

    • 问题是它没有为我构建一个 .h 文件来包含,所以我不知道如何让我的代码使用 DLL/lib 中的类/命名空间/等。
    • 好的,但是导出的类必须在某处声明。那个文件在哪里?您需要将其#include 到您其他项目的 .cpp 文件中。也可以使用 LoadLibrary,但不确定这是否是您要查找的内容。
    • 等等,我只是使用要从DLL项目中导入头文件的类?
    • 天哪,我现在觉得自己很愚蠢。对不起,我从来没有意识到它会像使用相同的头文件一样简单。 :(
    • 头文件有助于将您的接口定义到您的 dll(或作为替代的静态库)中。使用你的dll的人需要知道接口,所以头文件可以共享。
    【解决方案2】:

    你是否将.dll对应的.lib文件添加到其他项目的目录中?

    链接器使用的是 .lib 文件,而不是 DLL(加载程序在运行时使用)。

    【讨论】:

      【解决方案3】:

      .dll 是一个共享库,而不是静态库(Windows 上的 .lib)。

      编译项目时必须始终链接静态库,您可以使用头文件 (.h/.hpp) 轻松调用它们的函数,而共享库有两种选择:

      • 静态链接(在编译时,但实现方式与静态库不同)
      • 动态链接(在运行时)

      我建议你阅读这篇深入的文章:http://www.codeproject.com/Articles/85391/Microsoft-Visual-C-Static-and-Dynamic-Libraries

      另见维基百科文章:https://en.wikipedia.org/wiki/Dynamic-link_library

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-07
        • 1970-01-01
        相关资源
        最近更新 更多