【问题标题】:How to use a DLL without the need of its .h and .lib files in a VC++ 6.0 Project?如何在 VC++ 6.0 项目中使用 DLL 而无需 .h 和 .lib 文件?
【发布时间】:2011-12-20 16:45:02
【问题描述】:

我不知道如何执行以下操作:

  • 我使用的是 MS Visual C++ 6.0
  • 我有一个可编译的 Win32 DLL 项目。
  • 我有另一个项目,这次是一个 Win32 控制台项目,它使用 DLL 通过包含它的头文件并链接 .lib 文件 DLL。

现在我想要另一个项目,类似于第二个但不使用头文件和 lib 文件。

这可能吗?我读到的任何地方都需要 dll+lib+h 或 dll+h。如果你知道接口,一个DLL文件就足够了?

顺便说一句,“使用 DLL”是指使用 DLL 中定义的类和函数。

【问题讨论】:

  • 你为什么不想使用标题?
  • 如果没有声明接口,你如何“知道接口”?这通常放在头文件中。 .lib 文件帮助链接器确定需要使用 DLL。你可以使用 LoadLibrary + GetProcAddress 来做这件事。
  • @Jane - 我想你认为没有 .h 或 .lib 的另一个 Win32 DLL 项目实际上确实有它们。否则,您将需要自己找到函数和类签名(如何,我不知道)。我怀疑对项目属性的彻底调查将揭示“缺失”声明(lib 或标头)。
  • @All:实际上我拥有所有文件(.dll、.h、.lib),所以我知道如何生成它们。但是,我想为其他人发布 .dll 文件。而且我认为提供 dll 文件和描述所有类和函数接口的文档是很常见的。我错了吗?
  • 好的,我现在使用 .lib 和 .h 文件,结果这根本不是问题,现在一切正常。

标签: c++ visual-studio dll


【解决方案1】:

如果您只有简单的“extern C”函数,这是可能的。如果是这种情况,该方法可以使用LoadLibrary 加载dll,然后使用GetProcAddress 导入每个函数,当然您需要知道函数签名才能创建正确声明的函数指针。使用相反的类几乎是不可能的。

【讨论】:

  • 我认为如果你有一个可以在 DLL 中调用的工厂函数,你可以使用类。有一个普通的 C 函数,它创建并返回一个指向所需类实例的指针。然后加载库,并在该工厂函数上使用 GetProcAddress 并调用它来获取类。事实上,您只能在 DLL 中使用 1 个函数,它为您提供了一个用于所有其他交互的根对象。
  • @Nerdtron 是的,同意,但创建 dll 时必须考虑到该策略。
【解决方案2】:

如果您的 DLL 包含类,则很有可能它是一个 COM 组件。

如果是这种情况,#import 指令(您可以像 #include 一样使用)构建一些包含接口详细信息的临时包含文件。您应该使用 COM 来访问您的对象。

否则,如果您有一个带有 C++ 类的“普通”DLL,您可以使用链接器访问导出的符号:指示它转储映射(参见 here),以了解损坏的名称。但我认为手动构建界面是不可能的......

【讨论】:

    猜你喜欢
    • 2020-12-19
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-12
    • 1970-01-01
    相关资源
    最近更新 更多