c++ - 如何从另一个 C++ win32 控制台应用程序调用 C++ Win32 DLL

标签 c++ windows visual-c++ dllimport dllexport

我主要担心的是,我能够使用 VC++ 编写 C++ dll。现在 dll 出现在 Debug 文件夹中。

如何在其他 C++ 控制台应用程序中使用我的 DLL。如何添加引用或将 DLL 链接到应用程序。

还有一点,在创建 DLL 时,VC++ 向导给了我三个选项:

  1. 一个空的 DLL 项目
  2. 一个简单的 DLL 项目
  3. 导出一些符号的 DLL

现在根据来自 CP 的文章我使用了第三个选项。 (无法理解,因为该 dll 被 MFC 应用程序使用,一些在这个时间点上的进步有多么小)

我是否需要始终选择第三个选项?另外两个选项是什么意思?

最佳答案

不完全确定你的问题是什么但是:

使用哪个选项并不重要,重要的是向导为您做了什么;如果您使用第三个选项,那么向导会在您的头文件中创建一个位,如下所示:

#ifdef TEST_EXPORTS
#define TEST_API __declspec(dllexport)
#else
#define TEST_API __declspec(dllimport)
#endif

其工作方式是,在 DLL 项目中,TEST_EXPORTS 在编译器选项中定义,因此 TEST_API 计算为 dllexport,从而告诉链接器导出这些符号。如果您将此 header 包含在另一个项目中,它会将 TEST_API 定义为 dllimport,它告诉编译器在运行时在 DLL 中链接到它。这种导出符号的#define 方法被广泛使用并且易于阅读。

为了在 DLL 中调用函数/类,您需要通过以下两种方式之一导出符号: a) 使用 __declspec(dllexport) [这似乎在几乎所有情况下都是更方便的选择]或 b) 在您的项目中使用 .DEF 文件

还想提一下,您需要在 .exe 文件的解决方案中包含 DLL 项目,或者由 DLL 编译生成的 .lib。

关于c++ - 如何从另一个 C++ win32 控制台应用程序调用 C++ Win32 DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3572874/

相关文章:

c++ - 重新定义 QTreeWidgetItem::operator<

c++ - std::vector 的 .at() 函数到底做了什么?

c++ - 什么可能导致 DefWindowProc 停止处理消息?

windows - SDL.dll 在 Windows 10 上丢失,即使它位于游戏文件夹中

c++ - Visual Studio - 启用优化导致崩溃

c++ - Functions子手w/函数-编译错误-没有匹配的调用

c++ - v8 不再支持 v8::Value::ToNumber 了吗?

c++ - CreateWindowEx() 在哪里?

c++ - 循环不工作

c++ - 如何检测是否安装了自定义 terminate() 处理程序?