VS下的动态库建立与应用
本篇笔记记录VS下建立动态库工程,并链接到应用工程的过程。并用纯C++实现代码,可以跨平台使用。
一、 创建一个Win32控制台程序(MyDLL),选择DLL动态库。
二、 将工程中的有关Windows的内容删掉。比如:stafy.h(.cpp),target.h等。
三、 将dllmain文件删除,只留下MyDll.cpp文件。添加一个新建项MyDll.h文件。
四、 在MyDll.h文件中添加如下代码:相当于定义了一个函数声明的导出宏,声明了一个接口函数。为适应Linux平台,加入了dllexport.h文件。此处注意MYDLL_EXPORTS很关键,格式一定为NAME_EXPORTS.不然报错“不允许dllimport函数定义”。
#ifdef _MYDLL_H
#endif _MYDLL_H
#include "dllexport.h"
#ifdef MYDLL_EXPORTS
#define MYDLL_API __declspec(dllexport)
#else
#define MYDLL_API __declspec(dllimport)
#endif
MYDLL_API int myFunc(void);
#endif
五、 在MyDll.cpp中定义一个接口函数。
#include "mydll.h"
MYDLL_API int myFunc(void)
{
printf("hi,Linux!\r\n");
return 0;
}
六、 新建一个应用的工程。同样为Win32控制台程序(TestDLL),同样做无Windows代码处理。
#include <stdio.h>
#include "mydll.h"
int main(int argc, char* argv[])
{
printf("hello,Linux!\r\n");
myFunc();
return 0;
}
七、 将动态库工程的内部文件夹(除去sln、ncb文件等)复制到TestDLL文件夹下(与sln文件同级)。
八、 在TestDLL工程下的solution中添加一个现有工程。添加MyDLL。
九、 对MyDLL工程属性做些设置:
1. 由于删掉了stdfy.h,因此需要设置不需要预编译头;
2. 由于加入了dllexport.h文件,需要添加其目录。在工程文件下(sln同级)新建一个文件夹Include,里面新建一个dllexport.h文件。在设置中的C++/常规/附加包含目录中添加../Include。
3. 在Release配置下重复上面操作。至此,程序可以在Debug和Release下编译通过。
十、 对TestDLL主工程进行相关设置:
1. 同样设置不使用预编译头;
2. 在.cpp中添加#include "mydll.h"。因此需要在设置中添加其目录。将mydll.h文件拷贝至Include文件中。同样设置C++/常规/附加包含目录中添加../Include。
3. 在cpp中调用接口函数。因此需将库文件链接到工程中。链接/输入/附加依赖项。添加Lib文件的目录:链接器/常规/附加库目录。对应的debug下添加../debug; Release下添加../Release。也可新建一个Lib文件夹放该lib文件,但是要在MyDLL下设置输出目录。
十一、 将两个工程关联起来。将TestDLL作为启动工程,将MyDLL作为附属工程。右键->项目依赖项,勾选MydLL。
十二、 在Release下编译,执行不调试: