【隐式导入】
l 即在程序指定链接的.lib(可以通在项目中设置,也可以通过代码指定);以及进行函数的前置声名(extern或者_declspec(dllimport)),注:可以通过在导出的头文件定义导出函数的前置声名。
l 通过.lib文件在可执行程序中生成DLL的重定位表(含DLL名称、导入的函数名表(存放导入的函数名,在生成可执行程序后就建立)、DLL中导出函数的地址映射表(此地址在进程空间初始化时,调用LoadLibary后,调用GetProcAddress函数获得的。))。
l 总结:采用这种方式编程时一般需要三个文件(导出头文件、.lib文件、DLL文件);程序发布时只需要带DLL文件。
l 优点:三方开发时可以根据头文件得出导出的函数以及详细的说明。
l 缺点:程序启动后即加了导入函数,但此函数可能一直不被使用。这种情况在导入库非常多时会造成内存资源的浪费。
【显示导入】
l 在程序运行中需要时导入,而不是隐式导入时在程序启动时导入所有需要的函数。
l LoadLibrary导入DLL;GetProcAddress获得函数地址;FreeLibrary释放DLL。
l 总结:采用这种方式编程时只需要一个DLL文件即可。
l 优点:需要时才导入,不会浪费内存资源。
l 缺点:三方开发时,对方必须利用查询DLL中的导入库工具来分析导出函数(如:dumpbin或depends)。这样造成对导出库了解不一致情况。