C语言编写DLL动态链接库并分别用VB和Python调用

笔者所使用的编程环境是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成功!

 

——————————————————————————————————————————————

 

 

 


笔者:欢迎转载,转载请注明出处!



 

你可能感兴趣的:(C/C++,Visual,Basic,Python,dll,python,vb,语言,c,integer)