VS2013生成dll及动态调用
2017-02-19 15:09
741 查看
VS2013生成dll及动态调用
标签(空格分隔): 学习笔记一、VS2013生成dll文件(制造端)
1.1创建动态库的方法
创建动态库需要生成.dll和.lib两个文件创建方法:
第一步:文件->新建->项目->win32控制台应用程序 项目名称:DLLGenerator
应用程序类型:DLL 附加项目:空项目
第二步:在创建的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目
4000
录下就会出现.dll文件和.lib文件
第六步:将.h文件.dll文件.lib文件拷贝到同一个文件夹中。之后将这个文件夹就可以发送给任何人使用你编写的函数了。
二、VS2013动态使用动态链接文件(使用端)
2.1环境配置
和配置一般使用库的配置方法一样(如opencv),这里不做详细介绍,直接贴图;第一步:新建工程,准备调用上面生成的dll文件
第二步:配置环境时,将vc++目录的包含目录,库目录分别包含上面生成的文件夹(.h,.dll,.lib)
第三步:连接器中加入lib文件
下面就可以自由的使用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_1 int Add(int a, int b) { return a + b; }
//dll_2 #include<windows.h> #include<mySubfunction.h> int Mul(int a, int b) { int c; c = Add(a , b); return c * a; }
同样的,我们心间一个工程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的调用都测试通过。
相关文章推荐
- VS2013 c++ 生成和调用DLL动态链接库
- VS2013环境生成和调用DLL动态链接库
- VS2013环境生成和调用DLL动态链接库
- VS2013动态库dll的创建和生成,以及调用
- VS2013生成Dll,在另一工程中调用dll(C++Win32)
- VS2013环境生成和调用DLL动态链接库(第一种方法)
- VS2013/VS2015生成动态链接库DLL、调用DLL
- vs2013 结合opencv3.0生成64位的动态链接库.dll
- 【vs2013]生成和调用dll
- MFC动态调用dll到指定的进程中(win7系统vs2013环境下)
- 在vs中用C的编程方式生成.dll文件并且动态、静态调用dll中的函数
- VS 2013控制台应用程序DLL生成与调用
- 在vs中用C++编程的方式生成.dll文件和以动态、静态调用dll中函数
- VS2013调用matlab生成的dll
- VB.NET动态加载C#或VB.NET生成的DLL文件调用动画教程[黑白智慧写](动态调用DLL).txt
- VS2013 生成事件,删除不必要的DLL
- Qt调用VS生成的dll
- C#从零开始——使用VS生成dll并调用
- VS 2010调用Matalab R2010b生成的DLL库的配置问题
- PB8调用使用C++与C#分别编写生成解压缩带有密码的zip压缩文件的动态链接库dll(部分内容转自互联网)