dll(动态链接库)是包含函数和数据的模块的集合。
它可以导出数据也可以导出函数以供其它的dll调用。
一个dll的工程项目,编译成功后,会产生一个.lib文件和一个.dll文件
动态库中的lib:不包含任何代码,只包含一些辅助信息,要跟dll一起使用,起到隐式链接的作用
动态库中的dll:包含所有导出函数实现代码, 在进程运行时加载到进程内存空间中
image.png

1 如何给dll加上导出函数?

1.首先在要导出的dll项目中, 给要导出的函数 加上函数的导出标志:
法一:

  1. extern "C" __declspec(dllexport)

法二:
在源文件中添加一个def文件, 在里面写上EXPORTS, 再写上导出的函数名
image.png

如何导入dll里的函数?

法一(显式链接)

导入 dll的项目中先include , 再通过LoadLibrary,GetProcAddress
image.png

法二(隐式链接)

注意: 下面这个第3步是错的, 正确的写法应该是

define DLL_IMPORT extern “C” __declspec(dllimport)

image.png
若再导入这个dll项目的头文件, 声明函数这步也可以省略了
前提是dll项目的头文件要像这样写:

  1. #ifdef YTH_EXPORTS
  2. # define SPEC dllexport
  3. #else
  4. # define SPEC dllimport
  5. #endif
  6. extern "C"
  7. {
  8. __declspec(SPEC)int __cdecl add(int a, int b);
  9. __declspec(SPEC)int __cdecl sub(int a, int b);
  10. }