利用C++制作dll并调用dll
2017-10-20 14:56
295 查看
Abstract:本文讲解如何利用c++制作dll并调用dll,用一个简单的加法函数来作为演示,并给出图形界面。
1. 打开vs(我用的是vs2010),然后点击文件—>文件—>新建—>项目,选择Win32控制台应用程序。并输入你想建立的vs工程名字和路径(就命名为addfun)。然后点击下一步,应用程序类型选择DLL(D)这一项。然后点击完成。就会出现下图。
2.里面有一个源文件addfun.cpp,我们可以编辑里面的内容了。里面主要是我们想生成的函数。另外我们需要建立一个与addfun.cpp相对应的头文件addfun.h。直接右键到头文件—>添加—>新建项—>选头文件,命名为addfun.h。头文件就我们想生成的dll的函数名了。
3.现在我们开始编辑addfun.cpp文件了。如下所示:
2
3
4
5
6
7
8
9
10
4.然后我们再编辑addfun.h,如下所示:
2
3
4
5
6
7
8
按照上面的格式我们编译就能生成我们想要的dll的api。
通过以上4步,我们可以在工程的Debug目录下找到addfun.dll和addfun.lib。
下面我们就开始介绍怎么来调用一个dll。
1.建立一个c++工程,就建立一个空文件就可以了。我们需要的就是addfun.dll和头文件。这个都可以拷到我们的新工程下。直接右键头文件,添加现有项把addfun.h添加过来。添加过来是这样的:
2
3
4
5
6
7
8
但是现在我们需要修改它,不要再生产dll,我们需要把它改为
2
3
4
5
6
7
8
上面代码和下面代码区别在于少了_declspec(dllexport),这个是生成dll的,我们现在不需要了。
2.下面展示下如何在主函数中加载并调用dll:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
这是程序这一行会有红色波浪 HINSTANCE hDllInst = LoadLibrary(“addfun.dll”);
这样修改:右键工程(addtest)—>属性—>常规—>字符集。
。
好的,现在就算把程序调用成功了。下面就是结果了:
所以制作dll也不是很难。
其他所有函数都可以这样来做,我们只需要把我们想打包的函数在头文件中指明,然后想使用这些函数的时候,头文件包含进去并把_declspec(dllexport)删除就可以了。然后load相应的dll就可以了。
1. 打开vs(我用的是vs2010),然后点击文件—>文件—>新建—>项目,选择Win32控制台应用程序。并输入你想建立的vs工程名字和路径(就命名为addfun)。然后点击下一步,应用程序类型选择DLL(D)这一项。然后点击完成。就会出现下图。
2.里面有一个源文件addfun.cpp,我们可以编辑里面的内容了。里面主要是我们想生成的函数。另外我们需要建立一个与addfun.cpp相对应的头文件addfun.h。直接右键到头文件—>添加—>新建项—>选头文件,命名为addfun.h。头文件就我们想生成的dll的函数名了。
3.现在我们开始编辑addfun.cpp文件了。如下所示:
// abc.cpp : 定义 DLL 应用程序的导出函数。 // #include "stdafx.h" #include "addfun.h" int add(int a,int b) { return a+b; }1
2
3
4
5
6
7
8
9
10
4.然后我们再编辑addfun.h,如下所示:
#include "stdafx.h" extern "C" { _declspec(dllexport) int add(int a,int b); typedef int (* ApiAdd)(int,int); }1
2
3
4
5
6
7
8
按照上面的格式我们编译就能生成我们想要的dll的api。
通过以上4步,我们可以在工程的Debug目录下找到addfun.dll和addfun.lib。
下面我们就开始介绍怎么来调用一个dll。
1.建立一个c++工程,就建立一个空文件就可以了。我们需要的就是addfun.dll和头文件。这个都可以拷到我们的新工程下。直接右键头文件,添加现有项把addfun.h添加过来。添加过来是这样的:
#include "stdafx.h" extern "C" { _declspec(dllexport) int add(int a,int b); typedef int (* ApiAdd)(int,int); }1
2
3
4
5
6
7
8
但是现在我们需要修改它,不要再生产dll,我们需要把它改为
#include "stdafx.h" extern "C" { int add(int a,int b); typedef int (* ApiAdd)(int,int); }1
2
3
4
5
6
7
8
上面代码和下面代码区别在于少了_declspec(dllexport),这个是生成dll的,我们现在不需要了。
2.下面展示下如何在主函数中加载并调用dll:
// addtest.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <Windows.h> #include "addfun.h" #include<iostream> #include<stdlib.h> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { int a=2,b=1,c=0; HINSTANCE hDllInst = LoadLibrary("addfun.dll"); ApiAdd myfun=0; myfun = (ApiAdd)GetProcAddress(hDllInst,"add"); // youFuntionName 在DLL中声明的函数名 if(myfun) { c=myfun(a,b); } FreeLibrary(hDllInst); cout<<c<<endl; system("pause"); return 0; }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
这是程序这一行会有红色波浪 HINSTANCE hDllInst = LoadLibrary(“addfun.dll”);
这样修改:右键工程(addtest)—>属性—>常规—>字符集。
。
好的,现在就算把程序调用成功了。下面就是结果了:
所以制作dll也不是很难。
其他所有函数都可以这样来做,我们只需要把我们想打包的函数在头文件中指明,然后想使用这些函数的时候,头文件包含进去并把_declspec(dllexport)删除就可以了。然后load相应的dll就可以了。
相关文章推荐
- 利用C++制作dll并调用dll
- Java调用dll与C++通讯(包括.dll文件的制作)
- C/C++调用Delphi制作的dll时发现的一些问题
- Dev-C++制作dll文件供Visual Basic调用程序
- 利用c#实现dll动态库,并在c++中调用的方法
- JAVA中利用JNI与VS2012实现C/C++的DLL调用
- c#利用SWIG调用c++dll学习总结
- C/C++调用Delphi制作的dll时发现的一些问题
- ok6410 AD C++ dll制作并在C#中调用
- c++制作DLL,C#调用
- c++调用vb6.0制作的activex dll
- VS2005环境下C#调用C++ DLL 联调(win32及wince)
- java调用C/C++写的库函数 dll
- C++项目调用C#dll项目
- 调用C++dll
- electron 使用 node-ffi 调用 C++ 动态链接库(DLL)
- java调用C/C++写的dll
- [转]浅析C++中虚函数的调用及对象的内部布局(利用汇编深刻理解C++虚函数底层实现机制)
- c++中只有一个dll文件的调用(动态调用法)
- C#调用C++写的DLL总结