windows下的dll库

extern "C" --------------在C++编译器中使用

作用是告诉C++编译器不要修改函数、变量的名称,因此通常用在dll文件编译参数中,使dll文件多次编译时,输出的函数、变量名称保持不变。相反的,__stdcall修饰函数时,编译后的函数名将发生变化,如__FUNCXX@112

__declspec(dllexport)  声明函数、变量 ----------------告诉编译器该函数、变量是输出给其他代码调用的。

__declspec(dllimport) 声明函数、变量--------------告诉编译器该函数、变量是由其他dll模块定义的,不能仅仅使用extern。

隐式链接dll:

应用程序中不需指明dll文件的实际存储路径,可以直接使用相关函数。

产生dll时同步生成导入库lib文件;

编译exe时,需要h头文件、lib导入库文件(#pragma comment(lib, "..\\XXX.lib"));

执行exe时,需要dll动态库文件。

显式链接的dll:

不生成导入库,应用程序在使用dll时需要指明库文件名称、路径;

调用LoadLibary调入DLL文件,然后再手工GetProcAddress获得对应函数。

windows导入库(.lib文件)和linux下的静态库(.a文件)的区别:

静态库本身就包含了实际执行代码、符号表等等,而对于导入库而言,其实际的执行代码位于动态库中,导入库只包含了地址符号表等,帮助程序找到对应函数的一些基本地址信息。

你可能感兴趣的:(windows下的dll库)