原文地址:动态链接库与静态链接库的区别(转载)
作者:牛妞
静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib 中的指令都全部被直接包含在最终生成的 EXE文件中了。但是若使用 DLL,该 DLL 不必被包含在最终 EXE 文件中,EXE 文件执行时可以“动态”地引用和卸载这个与 EXE独立的 DLL文件。静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。静态链接库与静态链接库调用规则总体比较如下。
对于静态链接库(比较简单): 对于动态链接库: 因此这里衍生出两个问题: 第一,存在两种调用方式——动态调用和静态调用 第二,两种调用方式的库的生成过程和调用规则 1〉动态调用 生成库的.h头文件中的声明格式如下: extern "C" 函数返回类型 __declspec(dllexport) 函数名(参数表); 在调用程序的.cpp源代码文件中按如下流程调用: 在main函数代码的开始处 定义需要的DLL模块的句柄和此DLL模块模块中需要调用的函数的函数指针。 定义好后紧接着就是标准的三部曲: 取得需要的DLL模块------>返回模块句柄 LoadLibrary("DLL模块路径") 取得需要的函数地址———>返回函数指针GetProcAddress(模块句柄,"函数名") 从内存中卸载DLL模块———>FreeLibrary(模块句柄) 2>静态调用 在调用程序的.cpp源代码文件中按如下流程调用: # include......... 告诉编译器与 DLL 相对应的.lib 文件所在的路径及文件名 # pragma comment(lib,"路径和文件名") extern "C" 函数返回类型 _declspec(dllimport) 函数名(参数表)分号 int main() { .............. } |