首页 > 学院 > 开发设计 > 正文

VS2013生成dll及动态调用

2019-11-08 02:27:19
字体:
来源:转载
供稿:网友

VS2013生成dll及动态调用

标签(空格分隔): 学习笔记


一、VS2013生成dll文件(制造端)

1.1创建动态库的方法

创建动态库需要生成.dll和.lib两个文件 创建方法: 第一步:文件->新建->项目->win32控制台应用程序 项目名称:DLLGenerator 应用程序类型:DLL 附加项目:空项目 微信截图_20160831174710.png-37kB 第二步:在创建的dll工程中编写自己需要编译成dll的函数cpp和头文件h

//cpp文件int Add(int a, int b){ return a + b;}int Mul(int c, int d){ return c * d;}//h文件int Add(int a, int b);int Mul(int c, int d);

第三步:建立dll源文件dllmain.cpp,用来定义应用程序的入口点

// dllmain.cpp : 定义 DLL 应用程序的入口点。#include <windows.h>BOOL APIENTRY DllMain(HMODULE hModule, DWord ul_reason_for_call, LPVOID lPReserved ){ switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE;}

第四步,建立源文件Source.def 添加->新建->visual C++ ->模块定义文件(.def) - 在此文件第一行引号中填你的项目名称即可,EXPORTS下面列出要生成的函数名称 格式:“名称 @序号”)

LIBRARY "DLLGenerator"EXPORTS Add @1 Mul @2

第五步:点击编译生成解决方案,显示生成完成。此时debug目录下就会出现.dll文件和.lib文件 微信截图_20160831175516.png-28kB 第六步:将.h文件.dll文件.lib文件拷贝到同一个文件夹中。之后将这个文件夹就可以发送给任何人使用你编写的函数了。

二、VS2013动态使用动态链接文件(使用端)

2.1环境配置

和配置一般使用库的配置方法一样(如opencv),这里不做详细介绍,直接贴图; 第一步:新建工程,准备调用上面生成的dll文件 微信截图_20160831175940.png-15.4kB 第二步:配置环境时,将vc++目录的包含目录,库目录分别包含上面生成的文件夹(.h,.dll,.lib) 微信截图_20160831180041.png-42kB 第三步:连接器中加入lib文件 微信截图_20160831180058.png-11.7kB

下面就可以自由的使用dll文件中的任何函数了。

三、VS2013静态使用动态链接文件(使用端)

由于很多时候我们没有lib文件和h文件,这时候上述方法就不能使用了,但是我们可以使用以下方式。

#include<iostream>#include<Windows.h>#include<time.h>typedef int(*Dllfun)(int *, int);using namespace std;int main(){ Dllfun maopao1; HINSTANCE hdll; hdll = LoadLibrary("E://matthewCode//C&C++//DLLtest//DLLtest//Debug//dllOnlytest.dll"); if (hdll == NULL) { FreeLibrary(hdll); } maopao1 = (Dllfun)GetProcAddress(hdll, "maopao"); if (maopao1 == NULL) { FreeLibrary(hdll); } int a[10]; srand(time(0)); for (int i = 0; i<10; i++) a[i] = rand() % 50; maopao1(a, 10); for (int i = 0; i<10; i++) cout << a[i] << endl; FreeLibrary(hdll);}

四、dll文件的嵌套调用(使用端)

有时候我们调用的dll文件同时也调用了其他的dll文件,这时候我们还能顺利的调用这个dll文件吗?答案是肯定的。下面我们创建一个dll_1实现一个加法函数,在dll_2中我们调用dll_1中的加法函数,并产生一个新的乘法函数。上述两个过程都同第一小节的步骤得到dll文件,lib文件,h文件。

//dll_1int Add(int a, int b){ return a + b;}

微信截图_20160901102606.png-14.9kB

//dll_2#include<windows.h>#include<mySubfunction.h>int Mul(int a, int b){ int c; c = Add(a , b); return c * a;}

微信截图_20160901102648.png-17.4kB 同样的,我们心间一个工程3,分别调用dll_1,和dll_2的函数,环境的配置在这里省略不写(dll_1和dll_2的lib,h,dll文件都需要配置)。 工程3的代码如下:

#include <iostream>#include "mySubfunction.h"#include "J_Subfunction.h"using namespace std;int main(){ int a = 1; int b = 2; int c; int d; c = Add(a, b); d = Mul(a, b); cout << c << endl; cout << d << endl;}

输入1,2返回值都是3说明所有dll的调用都测试通过。 微信截图_20160901103004.png-19.2kB


上一篇:数据结构之二叉树

下一篇:QT配置VS

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表