dll和lib的区别:如果采用静态链接库,则无论你愿不愿意,lib中的指令都被直接包含在最终生成的EXE文件中了。但是若使用DLL,该DLL不必被包含在最终EXE文件中,EXE文件执行时可以“动态”地引用和卸载这个与EXE独立的DLL文件。静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。
dll的特点:只要遵循约定的DLL接口规范和调用方式,用各种语言编写的DLL都可以相互调用
lib的特点:
(1)库不是个怪物,编写库的程序和编写一般的程序区别不大,只是库不能单独执行;
(2)库提供一些可以给别的程序调用的东东,别的程序要调用它必须以某种方式指明它要调用之。
库的调试与“运行”:将库工程和应用工程(调用库的工程)放置在同一VC工作区,只对应用工程进行调试,在应用工程调用库中函数的语句处设置断点,执行后按下F11,这样就单步进入了库中的函数
dll文件的导出函数的两种方式:
1. 通过在函数声明上加上(extern “C”) _declspec(dllexport),,其中extern"C"可以选填,它是限制函数名是否被编辑器修改;但是extern "C" 无法修饰类函数,因此,对于类函数需要用第二种方式
2. 添加模块文件,打开项目属性,链接器->输入->模块定义文件。模块定义文件可以自己创建,把路径添加到前面的位置:
内容如下:
LIBRARY dll文件名
EXPORTS
函数名 @ 编号
函数名指的是dll文件中的函数名;编号可以是1-N,用于程序调用,为了安全。
显示调用dll文件流程:
1. 创建HINStANCE实体hdll
2. 创建函数指针Fun
3. hdll=LoadLibrary("……");//载入dll文件
4. Fun=GetProcAddress(hdll,"函数名“);
5. 调用函数