从我的 DLL 导入 C++ 函数不会导出库

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

本文关键字:函数 我的 DLL 导入 C++      更新时间:2023-10-16

我想创建一个导出函数和结构的dll。我完成了演练,这是我所拥有的:

项目 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

然而没有生成库,只有 dll 和 pdb

智能感知显示MYDLL_EXPORTS __declspec(dllexport)dllimport部分灰显...所以我必须出口...

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

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

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

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

因此,没有创建库的真正原因是(我的猜测)在试验代码时,在添加MYDLL_EXPORTS定义之前,创建的未被清理的文件......我将始终删除构建文件夹,然后再试一次,以便将来。

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

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

  1. 选择要导入函数的项目。
  2. 在顶部菜单上,单击项目>引用...。
  3. 单击中底部的"添加新引用"按钮。
  4. 选择要从中导入的 dll。
  5. 单击"确定"关闭所有对话框。
  6. 重新生成解决方案。

无法导出结构。它们使用头文件传达给其他二进制文件。只能导出函数入口点(包括类成员函数)和静态数据字段。应将标头包含在 dll 代码和使用 DLL 的所有应用程序中。#ifdef MYDLL_EXPORTS正是有这个目的。