动态链接库与静态链接库

1.静态链接库

1.1创建方法

  • 打开Vs2017

  • 添加cpp和.h文件,并在cpp包含.h文件

  • cpp中写代码

  • 在.h文件中声明

  • 编译

1.2使用方法

  • 将生成的.lib文件和.h文件复制到需要使用的工程目录下

  • 放到这里

  • 从工程中导入并包含.h文件

  • 声明需要用到的lib 方法1 :

  • 声明需要用到的lib 方法2:

项目属性中添加lib库

  • 效果

1.3总结

优点

  • 使用很方便

缺点

  • 代码被直接编译到当前PE文件中,一旦对lib代码进行了扩展,exe文件也需要进行重新编译了。

2.动态链接库

2.1编写方法

  • 打开vs2017,新建

  • 在cpp中写代码

2.2 导出方式 1 _declspec(dllexport)

  • 在.h中 声明导出

  • 生成 在LordPE中查看

2.3 导出方式 2 def文件声明

  • 新建一个def文件 写

  • 编译 在LordPE中查看

2.4 总结

  • extern "C"
  • 使用了extern"C"导出的函数能正确识别函数名(防止名称粉碎)
  • 未使用 extern"C"导出的函数名称会变得不一样(名称粉碎)
  • 调用约定
  • 使用了 stdcall的函数名前会加一个“_”
  • 最好 使用stdcall 因为它是内平栈,不需要再修改EXE
  • 使用_declspec( dllexport )
  • 说明本文件是导出文件
  • def声明导出
  • 函数个数变多了
  • 函数名都可以正常识别
  • 写了NONAME的没函数名
  • 函数的序号和def文件中写的@相同

3.使用方法

3.1隐式链接

  • 将 .h .dll .lib 放到要使用的工程目录下
  • 包含 .h 导入lib
  • 运行

3.1显式链接

  • 定义函数指针
  • 使用 LoadLibrary 加载dll
  • 使用GetProcAddress 找到需要的函数地址
  • 将函数地址赋值给函数指针变量
  • 使用这个函数指针
  • 使用方法

4对比

  • 可扩展性动态库比静态库要好。只要编译DLL就行
posted @ 2019-04-25 08:23  Kakadewo  阅读(143)  评论(0)    收藏  举报