动态库函数

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

posted on 2014-10-31 16:17  kangbry  阅读(419)  评论(0编辑  收藏  举报

导航