c++ 从 dll 导入函数 - 我的 dll 不导出 lib

c++ import functions from dll - my dll doesn't export lib

我想创建一个导出函数和结构的 dll。我经历了 walkthrough,这是我所拥有的:

myDll 项目:the_dll.h

#ifdef MYDLL_EXPORTS
#define MYDLL_API __declspec(dllexport) 
#else
#define MYDLL_API __declspec(dllimport) 
#endif

typedef struct MyStruct
{
    bool b;
} MYSTRUCTTYPE, *PMYSTRUCTTYPE;
typedef const MYSTRUCTTYPE *MYCSTRUCTTYPE;

MYDLL_API bool dllF();

myDll 项目:the_dll.cpp

#include the_dll.h

bool dllF() { return true };

在myDll项目的预处理器定义中,我定义了MYDLL_EXPORTS

在链接器 -> 高级 -> 导入库中我看到 $(OutDir)$(TargetName).lib

但是没有生成lib,只有dll和pdb

Intellisense 显示 MYDLL_EXPORTS__declspec(dllexport) 并且 dllimport 部分显示为灰色...所以我必须导出...

我已经包含了依赖的 header 文件,并在调用者项目中设置了额外的库目录和额外的包含目录,以及依赖库。但是......在没有lib的情况下...... 需要此 dll 中的函数的项目给出未解析的外部符号错误。

如何让我的 dll 创建一个库?我错过了什么? (或者...我如何在不链接到库的情况下使用它的功能并包含 header ?)

注意:我假设不需要导出结构和类型定义...是吗?

更新:正如我在评论中所写,当我将项目导入不同的解决方案并删除所有调试文件夹时,项目确实创建了一个库......我一直"Build -> Clean Solution" 两次尝试之间,但我想有些东西没有得到清理......

所以没有创建库的真正原因是(我的猜测),在试验代码时和添加 MYDLL_EXPORTS 的定义之前,创建的文件没有被清理......在以后重试之前,我总是会删除构建文件夹。

我在 VS2013 中检查了一个小测试项目。它在 Debug 目录中为我的两个 DLL 生成了 .lib 文件。这意味着如果设置没有搞砸,使用默认设置,您应该在构建 DLL 后拥有 implib。

事实上,只有当您要将您的dll 分发给客户时,您才需要.lib 文件。如果你想在其他项目的同一个解决方案中使用这个 dll,请执行以下操作:

  1. Select 您要导入函数的项目。
  2. 在顶部菜单中单击项目->参考....
  3. 单击中间底部的按钮 "Add New Reference"。
  4. Select 个您要从中导入的 dll。
  5. 单击确定关闭所有对话框。
  6. 重建您的解决方案。

无法导出结构。它们使用 header 文件与其他二进制文件通信。您只能导出函数入口点(包括 class 成员函数)和静态数据字段。您应该将 header 包含到您的 dll 代码和所有使用您的 DLL 的应用程序中。 #ifdef MYDLL_EXPORTS 正是这个目的。