从我的 DLL 导入 C++ 函数不会导出库
c++ import functions from my dll doesn't export lib
我想创建一个导出函数和结构的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,请执行以下操作:
- 选择要导入函数的项目。
- 在顶部菜单上,单击项目>引用...。
- 单击中底部的"添加新引用"按钮。
- 选择要从中导入的 dll。
- 单击"确定"关闭所有对话框。
- 重新生成解决方案。
无法导出结构。它们使用头文件传达给其他二进制文件。只能导出函数入口点(包括类成员函数)和静态数据字段。应将标头包含在 dll 代码和使用 DLL 的所有应用程序中。#ifdef MYDLL_EXPORTS
正是有这个目的。
- 为什么我的删除节点函数实际上没有删除节点?
- 为什么在我的函数类型后使用引用运算符 (&) 允许我修改它返回的值?
- 模板,函数使用错误的构造函数来复制我的对象
- 为什么我的递归函数按降序打印,然后按升序打印?
- 为什么我的模板化函数需要从一个迭代器转换到另一个迭代器?
- 在哪里放置我的函数?进入我的母语 Gui 还是进入我的演示者?
- 为什么我的数组双精度函数不起作用?
- 移动赋值运算符;尝试引用已删除的函数.我该如何解决这个问题?
- 为什么我的双向链表删除函数会删除多个节点?
- 为什么在我的 main 函数中声明整数后我的整数数组中会出现错误?
- 如何返回实际值(在我的例子中是无符号字符数组)而不是来自 C++ 函数的指针?
- 为什么我的运算符 + 重载尽管是通过引用传递的,但仍调用我的复制构造函数?
- 为什么在尝试测量函数返回所需的时间时,我的运行时编号是错误的?
- 查找定义我的 C/C++ 函数/宏的文件比'grep'更简单的方法
- 为什么我的 while 函数没有终止?
- 为什么我的 constexpr 对象在我的函数中不是 constexpr?
- 我关于函数"Assert"的C++代码有问题
- 如何检测除整数以外的任何内容是否传递给我的类构造函数?
- 链表堆栈类的复制构造函数:我的正在向后复制
- 为什么在这种情况下没有调用复制构造函数-我的推理正确吗?