linux调用库的方式有三种:
1.静态链接库
2.动态链接库(隐式)
3.动态加载库(显式)
其中1,2都是在编程时直接调用,在链接时加参数-l进行链接
第三种需要在编程时使用dlopen等函数来获取库里面函数的定义,然后进行调
linux
readlink
dlopen 加载动态库
dlclose 卸载的动态库
dlsym 从动态库获取函数地址
windows
GetModuleFileNameA
LoadLibrary 加载动态库
GetProcAddress 获取函数地址
FreeLibrary 卸载动态库
extern "C" __declspec(dllexport) 将一个函数声名为导出函数,就是说这个函数要被其他程序调用,即作为DLL的一个对外函数接口
extern "C" __declspec(dllimport) 将dll中的函数声明导入,就是说外部程序要调用这个函数
__cdecl约定函数参数按照从右到左的顺序入栈,并且由调用函数者把参数弹出栈以清理堆栈。因此,实现可变参数的函数只能使用该调用约定
__stdcal约定函数参数按照从右到左的顺序入栈,被调用的函数在返回前清理传送参数的栈,函数参数个数固定。由于函数体本身知道传进来的参数个数,因此被调用的函数可以在返回前用一条ret n指令直接清理传递参数的堆栈
__fastcall约定将函数的从左边开始的两个大小不大于4个字节(DWORD)的参数分别放在ECX和EDX寄存器,其余的参数仍旧自右向左压栈传送,被调用的函数在返回前清理传送参数的堆栈
来源:https://www.cnblogs.com/kangbry/p/4065346.html