之前最头疼的问题,一定要查清楚。
1,.h是函数声明的接口,仅仅是接口
2,.dll中有函数的可执行代码
3,.lib分两种情况,分别对应静态链接(lib是静态库)与动态链接(动态链接的导入库import library)
然后:如果程序是静态链接,那么只需要h与lib文件,lib文件中含有函数代码;如果是动态链接,那么lib作为导入库,其中没有函数实现代码,只有函数的地址表等信息,方便在dll文件中找到函数的实现。他起到桥梁作用。
.h是编译时需要的,.lib是链接时需要的,.dll是运行时候需要的。
dll的现实链接与隐式链接:
对于dll有没有对应的lib导入库,分为两种情况,要是有lib,那么程序会直接隐式加载,要是没有lib,那么就需要手动LoadLibrary调入dll文件,然后再GetProcAddress获得函数地址,即显式链接。
所以说,有了lib,只需要链接导入库后直接利用函数声明进行调用即可,没有lib就需要显氏地调用了。
若生成了dll,则肯定会生成lib文件,如果要完成代码的编译与链接,只需要.h .lib就够了,如果要使动态链接库的程序运行起来,那么就需要dll文件了。