c++中dll的编写和调用

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 导出函数名

猜你喜欢

转载自blog.csdn.net/speargod/article/details/83788586