我想创建一个导出函数和结构的DLL。我经历了walkthrough,这就是我所拥有的:
Project 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();
Project 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
部分显示为灰色...所以我必须要导出...
我已经包含了从属头文件,并在调用者项目中设置了其他库目录和其他包含目录以及从属库。但是......在没有lib的情况下...... 需要此dll中的函数的项目会给出未解决的外部符号错误。
如何让我的dll创建一个lib?我错过了什么? (或者......如何在不链接到lib并包含标题的情况下使用其功能?)
注意:我假设不需要导出结构和typedef ......是吗?
更新:正如我在评论中写的那样,当我将它导入不同的解决方案并擦除所有调试文件夹时,该项目确实创建了一个库...我一直在“构建 - >清理解决方案“尝试之间,但我想有些事情没有得到清理......
所以没有创建lib的真正原因是(我的猜测),在尝试代码时和添加MYDLL_EXPORTS
的定义之前,创建的文件没有得到清理......我会始终在再次尝试之前删除构建文件夹。
答案 0 :(得分:1)
我在VS2013中检查了一个小型测试项目。它为Debug目录中的两个DLL生成了.lib文件。这意味着如果设置没有搞砸,使用默认设置,您应该在构建DLL后使用implib。
事实上,只有在想要将dll分发给客户时才需要.lib文件。如果要在其他项目的同一解决方案中使用此dll,请执行以下操作:
无法导出结构。它们使用头文件传递给其他二进制文件。您只能导出函数入口点(包括类成员函数)和静态数据字段。您应该将头文件包含在dll代码和使用DLL的所有应用程序中。 #ifdef MYDLL_EXPORTS
正是出于这个目的。