【问题标题】:How do you link a .dll/.lib implementation of abstract interface in VS 2019?如何在 VS 2019 中链接抽象接口的 .dll/.lib 实现?
【发布时间】:2021-09-05 12:45:08
【问题描述】:

我有一个包含需要实现的抽象类的接口(它只是一堆 .h 文件)。

我在网上找到了该接口的开源实现。它附带了我用来构建 .dll 和 .lib 文件的 CMake 文件。

我将 .dll 文件放在我的解决方案目录中,并将所有 .lib 文件设置为依赖项。

如何使用或查找被覆盖的类?我应该以某种方式包含 .dll 文件吗?使用命名空间?我不知道如何从 dll 中访问函数或类,也不知道它们会被命名为什么。

更新:我认为获取源文件然后尝试使用覆盖的类可能更容易。问题是,即使那些仍然是抽象的?我认为“对接口进行编程”的全部意义在于允许您拥有抽象类的对象并进行调用,而不管实现是什么。它不应该自动附加到实现吗?

【问题讨论】:

  • 快速说明:您的信息中有很多错误的假设和很多混乱,您不太可能得到答案。首先,如果您没有在代码中对其进行排序,则不会发生任何事情,所以不,任何事情都不应该自动“附加”(无论您对这个词的意思是什么)。
  • Visual Studio 有很多工具。我认为将实现附加到接口可能是其中之一。如果您能指出我所做的错误假设,那将会很有帮助。我如何命令它将函数“附加”到 dll 的实现?

标签: c++ visual-studio dll linker dllimport


【解决方案1】:

这不是详尽的答案,而是扩展评论。

Visual Studio 有很多工具。

您所问的与 Visual Studio 完全无关。 Visual Studio 只是您编写代码的编辑器。它做了很多与开发人员相关的事情,但绝不会干扰您的程序。

您可以获取您的程序,在记事本中对其进行编辑,然后使用 CMake+Clang 构建结果,这不会改变您的任何问题。

将实现附加到接口

这根本没有意义。看起来你混淆了许多不同的东西。

有 C++ 概念:

有 Windows 操作系统的概念:

有构建系统概念:

  • CMake 及其配置文件。

有未定义的概念:

  • 接口。这是一个有许多可能含义的加载词。通常人们从上下文中猜测含义。例如,我们可能非正式地谈论某个模块的接口,我们可能将公共方法称为某个类作为其接口,我们可能将 .dll 的 .lib 文件称为其接口描述,……
    Main关键是,至少在这种情况下,这没有技术意义。

所有这些概念都是正交的。它们可以一起使用。它们可以独立使用。它们不会相互交互 - 除非您制作它们。

【讨论】:

    猜你喜欢
    • 2019-06-05
    • 2020-10-20
    • 1970-01-01
    • 2012-07-17
    • 2010-10-29
    • 1970-01-01
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    相关资源
    最近更新 更多