VS2015接口程序调用(静态链接库[.library],动态链接库[.dll])
来源:互联网 发布:什么是数据库事务 编辑:程序博客网 时间:2024/06/06 23:48
最近在写接口程序,需要使用外部程序,走了很多弯路,现总结一下,供参考。
一、静态链接库[.library],动态链接库[.dll]
在项目属性中可以看到,配置类型描述了动态库,静态库,应用程序等。一般在项目创建的时候就指定了项目类型。
静态库项目生成文件:*.lib
动态库项目生成文件:.lib,.dll
静态库项目中lib包括源程序(函数和数据);动态库lib中只是项目的导入库(包括函数和变量的符号名),不包括源程序。
二:使用准备
1:引入一个动态库(dll)或者一个静态库(lib)时一般的步骤是::
完成函数,变量声明,添加头文件 *.h配置库的目录 *.lib 将dll拷贝到可执行文件所在的目录(仅限于动态库)
2:头文件(.h)文件、.dll文件和.lib文件的关系:
2.1————.h文件是编译时需要的,因为里面有函数或变量声明。
2.2————.lib文件就有话说了,首先,对于一个静态库来说,其是以xxx.lib的形式,而对于一个动态库来说,当IDE帮我们生成了.dll文件时,还会同时生成一个xxx.lib文件,这里的.lib不是静态库,而是动态链接库的导入库(Import Libary)
2.3————.dll文件是生成的动态库,是在程序运行时动态加载的。
3:文件准备
3.1. 使用静态库需要文件:*.h,*.lib,
3.2. 使用静态库有两种方法:a:静态调用,需要文件:*.h,*.lib,*.dll
b:动态调用,需要文件:**.h,*.dll
三,使用
1:静态库使用
1.1增加 静态库中函数和数据的声明,一般是通过引入头文件(*.h)方式1.2导入库文件,有两种方式:a:显式导入,通过ID E在 项目属性-》连接器-》输入-》外部依赖 b:隐式导入,在头文件中使用导入语句#pragma comment(lib, "static.lib") 就可以使用了。
2:动态库使用
2.1静态调用
静态调用与静态库使用相似,只是实现了声明和实现的分离(lib【导入库】,dll)
步骤: 2.1.1增加 静态库中函数和数据的声明,一般是通过引入头文件(*.h)方式 2.1.2导入库文件,有两种方式:a:显式导入,通过ID E在 项目属性-》连接器-》输入-》外部依赖 b:隐式导入,在头文件中使用导入语句#pragma comment(lib, "static.lib") 2.1.3,拷贝 *.lib *.dll到运行程序目录,一般与exe文件在同一目录 就可以使用了。
2.2动态调用
需要文件:**.h,*.dll
//声明函数指针 这一般参照头文件书写,注意参数类型 typedef void(*lpCall)(void); // //创建dll句柄 HINSTANCE hDll; // //装载dll,注意dll路径 hDll = LoadLibrary(_T("MFCdll.dll")); if (NULL == hDll) { AfxMessageBox(_T("DLL加载失败!")); } // //检索指定DLL中的输出库函数地址 , GetProcAddress函数的使用 lpCall pShowDlg = (lpCall)GetProcAddress(hDll, "ShowDlg"); if (NULL == pShowDlg) { AfxMessageBox(_T("DLL内部函数调用失败!")); } // //创建DLL对话框 pShowDlg(); // //在恰当的时候释放动态链接库**.dll FreeLibrary(hDll);
一般我们使用的都是动态库的静态调用。即准备:头文件(*.h),导入库文件(*.lib),动态链接库文件(*.dll)
- VS2015接口程序调用(静态链接库[.library],动态链接库[.dll])
- VS2013/VS2015生成动态链接库DLL、调用DLL
- VS2015 动态链接库&&静态链接库
- VS2015环境下生成和调用DLL动态链接库
- .h .lib .dll文件,静态链接库与动态链接库,静态调用与动态调用
- Matlab2016 与vs2015 混编(生成dll动态链接库)
- 动态链接库(dynamic link library ,DLL)
- java调用动态链接库(dll)
- 调用动态链接库(dll)
- 静态调用动态链接库
- j2ee通过jni接口调用动态链接库DLL
- Lua使用动态链接库调用C模块(VS2015)
- VS2015编译SQLite3 动态链接库DLL和静态库Lib
- windows动态链接库(dynamic-link library, DLL)
- DLL(Dynamic Link Library),动态链接库。
- 关于CC_DLL (dll->dynamic link library 动态链接库)
- C++对dll链接库的显示(动态)调用和隐式(静态)调用
- Java调用C++动态链接库dll,有详细过程。VS2015+Eclipse以及失败解决方案
- 交叉编译详解 一 概念篇
- 链地址法和开放定址法,求等概率下查找成功时的平均查找长度
- 卷积操作 tensorflow tf.nn.conv2d
- 关于map容器,你需要知Something
- Ubuntu系统Sogou输入法不能正常使用
- VS2015接口程序调用(静态链接库[.library],动态链接库[.dll])
- 在Docker中运行Java:为了防止失败,你需要知道这些
- 关于namespace和use
- 实现对文件的实时监控--使用Inotify方法
- su切换root身份,Authentication failure (Ubuntu 16.04 LTS)
- Python单下划线和双下划线
- iOS静态库和动态库
- js实现页面刷新和跳转(指定时间)
- Git 提示fatal: remote origin already exists 错误解决办法