lesson19

   


1:动态库和静态库

静态库:函数和数据被编译进一个二进制文件(通常扩展名为.LIB)。在使用静态库的情况下,在编译链接可执行文件时,链接器从库中复制这些函数和数据并把它们和应用程序的其它模块组合起来创建最终的可执行文件(.EXE文件)。

在使用动态库的时候,往往提供两个文件:一个引入库和一个DLL。引入库包含被DLL导出的函数和变量的符号名,DLL包含实际的函数和数据。在编译链接可执行文件时,只需要链接引入库,DLL中的函数代码和数据并不复制到可执行文件中,在运行的时候,再去加载DLL,访问DLL中导出的函数。

2:动态链接库加载的两种方式
隐式链接
显示加载

3:拖动批处理文件.bat到命令窗口,就可以执行dumpbin命令了,但是只是当前窗口有效

他命令下有这些参数


查看一个动态库有哪些导出文件dumpbin -exprots dll1.dll

int _stdcall add(int a,int b)
{
return a+b;
}


int _stdcall subtract(int a,int b)
{
return a-b;
}


加载引入库文件.lib后,在一下路径中查找该exe程序所需要的文件

查看程序需要加载那些动态库文件,有两种方式







1:设计动态库
在动态库中函数前面加_declspec(dllexport),表示该函数是导出函数,调用该dll的程序可以调用该函数接口
_declspec(dllexport) int _stdcall add(int a,int b)
{
return a+b;
}
_declspec(dllexport) int _stdcall subtract(int a,int b)
{
return a-b;
}

2:让程序加载动态库
①加载lib文件

②寻找dll文件
没找到会出错

放在以上的路径中



3:在程序中调用导出函
在引用程序中加入这样的声明,这样能找到该函数的实现代码
说明这两个函数是外部定义的函数:
//extern int add(int a,int b);
//extern int subtract(int a,int b);

说明函数是从动态链接库的引入库中导入的,代码执行的效率会更高点
//_declspec(dllimport) int add(int a,int b);
//_declspec(dllimport) int subtract(int a,int b);

void CDllTestDlg::OnBtnAdd() 
{
// TODO: Add your control notification handler code here
CString str;
str.Format("5+3=%d",add(5,3));
MessageBox(str);

}
void CDllTestDlg::OnBtnSubtract() 
{
// TODO: Add your control notification handler code here
CString str;
str.Format("5-3=%d",subtract(5,3));
MessageBox(str);
}
































  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值