最近要写一个动态库的东西,中间碰到了些问题,在网上一搜发现全是linux平台下动态库和静态库的生成方法,感觉都是些大牛,经过反复尝试终于解决了眼前的困难,因此就把他总结了一下,写出来供大家分享,废话不多说,开始。
一、写C语言函数的静态库
创建:1.新建win32静态库项目
2.写入我们的C函数,编译生成lib静态库
使用:
1.可以在工程中Setting设置link属性包含我们静态库所在路径和库名,然后我们就可以在工程中直接使用这个c函数了
2.我们也可以不在工程中设置,而是通过代码的方式声明我们要连接的静态库,方法是使用关键字pragma例如
#pragma comment(lib, "../lib/winclib.lib")好了,所有的C静态库中的函数我们都可以在项目中使用了
二、创建cpp函数的静态库
创建:1.新建win32静态库项目
2.写入我们的Cpp函数,编译生成lib静态库
使用:
cpp静态库的加载方法同c静态库加载方法一样,有两种,可以是代码声明也可以在工程中设置,但是要想使用cpp静态库中的函数,还必须对cpp函数的原型进行声明才行,这是cpp静态库和c静态库唯一的不同
三、写C和Cpp语言函数动态库
创建:
使用Win32 DLL项目,创建DLL,添加相应的文件
2.在文件中定义c或者cpp风格的函数,但是函数前要声明__declspec(dllexport)进行导出
例如:__declspec(dllexport) int Dll_Add()
3.若要以C风格函数进行输出的话还要加上extern "C"
例如:extern "C" __declspec(dllexport) int Dll_Add();
另外也可以对这些文件按模块化进行导出:这样函数前就不用进行代码说明了,只用定义一个def文件,文件格式为:
LIBRARY dllfunc.dll //导出库
EXPORTS //导出表
Dll_Mul
@1 //导出函数
Dll_Div
@2
使用:
对于动态库的使用方法有三种:
1.在工程中setting动态库的路径(这里要注意,动态库的编译生成了两个重要文件,一个是lib一个是dll)
2.#pragma comment(lib,"path")的方式去加载
3.使用动态库API LoadLibrary进行加载动态库,然后在动态库中用GetProcAddress获得函数的首地址,进行使用函数
如果说使用的是C动态库函数要声明extern “C” 函数名