1. 什么是dll
DLL(Dynamic Link Library)即动态链接库,DLL文件与EXE文件一样也是可执行文件,但是DLL也被称之为库,因为里面封装了各种类啊,函数啊之类的东西,就像是一个库一样,存储着很多东西,主要是用来调用的。一个应用程序可使用多个DLL文件,一个DLL文件也可能被不同的应用程序使用,这样的DLL文件被称为共享DLL文件。
当程序需要调用DLL所定义的功能时,需要先载入DLL文件,然后取得函数的地址,最后进行调用。
调用方式主要分为两种:隐式(通过lib文件与头文件) 与 显式(只通过DLL文件)。
DLL文件是Windows操作系统下定义的文件,可被多种语言调用。
通过DLL来调用功能,可实现代码的封装与复用,去除功能之间的耦合,有利于模块化。降低应用难度的同时,也可以实现知识产权的保护。
2. dll 在vs2015怎么编写
1.首先创建一个空的DLL文件,创建方法:新建——项目——Win32控制台程序——然后取个名字——确定——下一步——选择DLL——勾选空白项目。顺利新建了项目。
2.然后我们在头文件下创建一个头文件这里我们是DLL1.h,输入如下代码:
(二)回顾一下VC++支持的DLL:
DLL的编制与具体的编程语言及编译器无关,动态链接库随处可见,VC++支持三种DLL:非MFC动态库、MFC规则DLL和MFC扩展DLL。DLL导出函数(或变量、类)可供应用程序调用;DLL内部函数只能在DLL程序内使用,应用程序无法调用它们。
(三)导出函数的声明方式:
1) 一种在函数声明类型和函数名之间加上“_declspec(dllexport)”。
、定义需要用到的头文件和源文件
// header.h
__declspec(dllexport) int add(int a ,int b);//add是函数名,可声明多个
__declspec(dllexport) int sub(int a ,int b);
// 如果是c++工程,则需要在函数声明前加上extern “C”
extern “C” __declspec(dllexport) int add(int a ,int b);
extern “C” __declspec(dllexport) int sub(int a ,int b);
// src.cpp
int __declspec(dllexport) add(int a ,int b){
return a+b;
}
int __declspec(dllexport) sub(int a, int b){
return a-b;
}
反复尝试终于成功了,虽然很初级,但是还是要Mark一下。文章由参考
int result = dbOper.verifyuser("Abc", "cd", "c##scott", "tiger", "orcl", "12");
连接(1)https://msdn.microsoft.com/zh-cn/library/ms235636(v=vs.120).aspx
只不过此文是在同一个工程下的不同项目之间进行dll调用,故仍有不同。
首先1.生成dll
生成的方式可以完全参考上面的连接。主要步骤为:1)新建项目C++/Win32控制台应用程序,命名,注意生成的是dll项目,本测试没有选择到处符号复选框,跟上面链接一样,但是在debug里面还是会有dll生成。2)编辑.h和.cpp文件。3)生成解决方案。这三步均按照上面的连接。4)将上述生成的debug内的dll,lib以及与dll同名的.h文件拷到某个位置,要记得哦,我放到include文件夹。
2.调用dll
很多网上的介绍都很复杂,各种配置。。这里似乎没那么复杂
主要步骤:1)新建项目C++/Win32控制台应用程序,命名。
2)选择没有预编译头
3)调用dll内的类函数,可以参照上面链接中的cpp文件
4)生成解决方案,现在肯定是很多错误,表捉急
5)将上面保存的文件中的.h放在你编辑的.cpp同文件夹下
6)将dll和lib文件拷贝到debug文件夹下,与exe文件是同一个文件夹
7)右键项目名字选择属性,->配置属性->VC++目录->常规-库目录,选择你放置了lib的debug文件夹
8)->配置属性->连接器-输入-附加依赖项-编辑加入lib的文件名(全名包含后缀)-确认
9)重新生成,运行即可
2) 另外一种采用模块定义(.def)文件声明,需要在库工程中添加模块文件,格式如下:
LIBRARY 库工程名称
EXPORTS 导出函数名