前提:
1.记住生成的动态库是x64还是x86,必须与使用它的平台相对应
2. extern "C" __declspec(dllexport) void function();
其中extern "C"的作用是告诉编译器将被它修饰的代码按C语言的方式进行编译。
__declspec(dllexport)需要在生成动态库的项目中使用,此修饰符告诉编译器和链接器被它修饰的函数或类或变量需要从DLL导出,以供其他应用程序使用,否则生成不了lib文件;与其相对的还有一句代码是__declspec(dllimport),给其他项目使用时使用·此修饰符的作用是告诉编译器和链接器被它修饰的函数或变量需要从DLL导入
最后是函数void function(),它就是需要被其他程序调用的函数。
__declspec(dllexport) 具体功能参考以下链接
https://www.cnblogs.com/lisuyun/p/5484017.html
生成过程
1.创建项目
2.默认生成的文件不管,添加自己的文件add.h和add.cpp,注意cpp文件中必须添加pch.h
3.编译完成后,找到文件dll,lib,.h
4.将.h文件添加到要调用的项目中,同时将dllexport修改为dllimport
5.dll和lib使用跟调用其他三方库一样
1)lib文件配置
方法一:#pragma comment(lib,"path");//path为lib文件的路径,dll文件与项目exe文件放一起
方法二:在项目属性中的链接器中配置
方法三:在属性管理器的全局文件Microsoft.Cpp.x64.user中添加;好处是不依赖项目
2)dll配置
1)拷贝到exe所在文件夹
2)项目属性->配置属性->调试->环境 添加;path=dll文件所在路径;
6.注意事项
1,生成dll必须加入__declspec(dllexport),调用dll必须添加__declspec(dllimport)
2.调用dll的解决方案中,只需要添加包含__declspec(dllexport)的头文件,其他头文件不需要添加
3.动态库调用动态库(假设有三个项目test,dlla,dllb,,test调用动态库dlla,dlla在生成时调用dllb)
dlla调用ddlb时,需要dllb的导出的的.h文件和dllb.lib文件。不需要dllb.dll文件
test调用dlla时,需要dlla.dll和dllb.dll(两个文件都要与test.exe或sln文件放一起),还需要dlla.lib 和dlla导出的的.h文件(即__declspec(dllexport)修饰的.h)