笔者所使用的编程环境是Visual Stdio 2010下的Visual C++、精简版Visual Basic 6.0、和IDLE,如有错误之处,欢迎批评指正!
以用C语言编写出一个求出两个数的较大值的DLL为例进行演示。
——————————————————————————————————————————————
首先打开VS 2010--> 新建工程 --> Win32 --> Win32项目 --> 输入一个自己喜欢的工程名称(笔者输入的是MakeDll),选择好保存工程的路径-->确定.
在 应用程序设置 --> "应用成程序型" --> 选择 "DLL(D)" --> 附加选项-> 选择"空项目(E)";
接下来点击"确定"进入项目工作窗口下.
——————————————————————————————————————————————
开始创建DLL:
第一步:
在头"解决方案资源管理器" --> 头文件 --> 右键 -->添加新建项 -->选择"头文件(.h)" -->输入文件名称(笔者输入的是max) --> 添加(A)
max.h头文件中的代码为:
#ifndef _MAX_H
#define _MAX_H_
__declspec(dllexport) int __stdcall fmax(int a,int b);
#endif
__declspec(dllexport) 的作用是指定导出该函数为DLL函数;
__stdcall是函数调用约定,表示该DLL函数被C/C++以外的语言调用;
第二步:
在头"解决方案资源管理器" --> 源文件 --> 右键 -->添加新建项 -->选择"C++文件(.cpp)" -->输入文件名称(笔者输入的是max.c) --> 添加(A)
max.c源文件中的代码为:
#include"max.h"
int __stdcall fmax(int a,int b)
{
return a>b?a:b;
}
在该源文件下我们将自己定义的头文件"max.h"包含进去,并且定义比较两数大小的函数fmax(),依然在此函数前声明该函数的调用为__stdcall类型;
第三步:
在头"解决方案资源管理器" --> 源文件 --> 右键 -->添加新建项 -->选择"模块定义文件(.def)" -->输入文件名称(笔者输入的是max.def) --> 添加(A)
max.def的作用是用于导出一个DLL的函数;
max.def模块文件中的代码为:
LIBRARY MakeDll
EXPORTS
fmax @1
''LIBRARY''的作用是告诉链接器(linker)如何命名你的DLL,但它只是影响lib连接dll的名称的,而不是影响生成dll的名称;
EXPORTS 语句的作用是引入导出的函数或数据组成的节;
fmax @1指定按序号导;
项目截图:
第四步:
按 F5启动调试 或直接 菜单栏 --> 生成 -->生成 MakeDll(U),这如果提示生成成功那么在你保存工程的的路径下的"Debug"文件夹下即可找到生成成功的MakeDll.dll动态链接库文件
以上就是介绍用C语言创建简单的DLL方法,在VC++6下创建方式基本相同,接下来就一起来看如何用VB和Python来调用它.
——————————————————————————————————————————————
用VB调用:
首先新建VB工程,选择"标准EXE"
在对象窗口设计好我们的界面,一些标签,三个文本框和一个按钮,如图:
控件的名称我使用的是默认值,在代码窗口中的代码如下:
Private Declare Function fmax Lib "D:\Develop\Project\VB\MakeDll\Debug\MakeDll.dll" _
(ByVal inta As Integer, ByVal intb As Integer) As Integer '声明DLL过程
Private Sub Command1_Click()
Dim a As Integer, b As Integer
a = Text1.Text
b = Text2.Text
Text3.Text = fmax(a, b) '调用MakeDll.dll
End Sub
代码窗口处截图:
OK,完成,下面按"F5 "启动运行,输入正确格式的数值,点击 "比较" ,看下结果如何:
Very well !VB调用成功.
——————————————————————————————————————————————
用Python调用:
在Python下调用DLL是十分简单的,Python有内置模块ctypes可帮助我们轻易完成这项工作.
打开IDLE--> File -->New Window,在代码窗口中敲入以下代码:
#!/user/bin/python
# _*_ coding: cp936 _*_
import ctypes
mydll=ctypes.windll.LoadLibrary("D:\Develop\Project\VB\MakeDll\Debug\MakeDll.dll")
a=17
b=25
print "较大数为:",mydll.fmax(a,b)
由于我们在编写DLL时对MakeDll.dll的调用约定为__stdcall,所以加载dll的方式应为:
ctypes.windll.LoadLibrary("dllpath")
或者
ctypes.WinDLL("dllpath")
接下来,保存、运行
运行结果:
IDLE 2.6.7
>>> ================================ RESTART ================================
>>>
较大数为: 25
>>>
OK,Python调用MakeDll.dll成功!
——————————————————————————————————————————————
笔者:欢迎转载,转载请注明出处!