动态库函数

柔情痞子 提交于 2020-03-04 03:40:29

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寄存器,其余的参数仍旧自右向左压栈传送,被调用的函数在返回前清理传送参数的堆栈

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!