文中介绍了一种实现VB调用C语言程序的方法

上传人:洪易 文档编号:40641115 上传时间:2018-05-26 格式:DOC 页数:5 大小:29.50KB
返回 下载 相关 举报
文中介绍了一种实现VB调用C语言程序的方法_第1页
第1页 / 共5页
文中介绍了一种实现VB调用C语言程序的方法_第2页
第2页 / 共5页
文中介绍了一种实现VB调用C语言程序的方法_第3页
第3页 / 共5页
文中介绍了一种实现VB调用C语言程序的方法_第4页
第4页 / 共5页
文中介绍了一种实现VB调用C语言程序的方法_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《文中介绍了一种实现VB调用C语言程序的方法》由会员分享,可在线阅读,更多相关《文中介绍了一种实现VB调用C语言程序的方法(5页珍藏版)》请在金锄头文库上搜索。

1、文中介绍了一种实现 VB 调用 C 语言程序的方法动态连接库法,给出了动态链接库制 作的一般框架,通过实例描述了动态连接库的实现及其制做方法、编程步骤,这种方法 具有普遍的意义。 关键词 VB 动态连接库 DLL C 程序 一、引言 Visual Basic( 以下简称 VB)是一 种可视化的面向对象的编程语言,以其编程简单、快捷等特点,深受广大 WINDOWS 程 序员的青睐。利用 VB 开发界面友好、操作方便的软件只需很短的时间。但是 VB 运行 速度较慢,对于庞大的科学计算问题,VB 的这种慢速会使人难以忍受。C 语言是国际 上非常流行的一种中级编程语言,以其灵活、高效等优点而获得广泛应

2、用,许多的应 用程序都是用 C 语言在 DOS 环境下编写而成。那么如何发挥 VB 和 C 这两种语言的优势, 用 VB 设计一种良好的 for windows 界面来调用 C 语言程序,即实现 VB 调用 C 语言程 序呢?现有的文献只提到动态链接库(以下简称 DLL)可以将这两种语言连接起来,但 有讲动态链接库 DLL 的制做及其编程方法。本文详细介绍了 Borland C 环境下制作动 态链接库以及 VB 调用 for dos 动态链接库的的方法、步骤,并通过实例描述 VB 调用 C 程序的全过程。 二、用 Borland C 编写 DLL 程序的方法 要想实现 VB 调用 C 程序,首

3、先需要用 Borland C 编写动态连接库 DLL 程序(假设 DLL 程序取名为 example)。动态链接库包含四个文件:C 语言源程序(.C)、模块定义文件(.DEF)、 原型函数文件(.H)和工程文件(.PRJ)。下面分别详细介绍一下这四种文件的具体 结构。1、编写 C 语言源程序的框架:C 语言源程序(example.C),它包括三种函数: 入口函数、输出函数和终止函数。其具体 结构如下:/*/ /* 文件名: example.C */*/ #include /*入口函数*/int FAR PASCAL LibMain ( HANDLE hInstance, WORD wDataS

4、eg, WORD cbHeapSize, LPSTR lpszCmdLine ) if (cbHeapSize!=0) UnlockData(0); return (1); /*输出函数*/ int FAR PASCAL example(int param1,.,char param n) . /*C 语言应用程序*/ /*终止函数*/int FAR PASCAL WEP ( int /*SystemExit*/ ) return(1); 以上各组成部分参数的含义:Windows.h 头文件,它包含有数据类型的定义、API 入口点定义和其它有用的参数信息。PASCAL 说明符定义该程序的传递参

5、数和净化 堆栈的协定(注意:DLL 外部传送的指针必须是远指针 FAR)。LibMain 带四个参数: hInstance、 wDataSeg、cbHeapSize 和 lpszCmdLine。第一个参数 hInstance 是 DLL 事例句柄, wDataSeg 参数是数据段(DS)寄存器值,bHeapSize 参数是在模块定义文 件中定义的堆的大小,LibMain 使用该值使本地堆初始化。lpszCmdLine 参数包括命令 行信息,但很少被 DLL 使用。一般来说,这四个参数是制作 DLL 通用的参数。如果不 想让 DLL 数据被封住,那么必须调用 unlockdata 恢复正常的非锁

6、状态,如果 DLL 初始 化已经成功,DLL 则返回 1,若不成功则返回 0 值,且 DLL 退出系统。DLL 的输出函数 实现用户所要完成的任务,这部分是 DLL 的核心。它与一般 C 语言程序不同之处在于 无 scanf 函数。所有的外部指针都是远指针 FAR。画直线函数要用 lineto 函数。DLL 包括一个终止函数,终止函数有时称为退出函数,它的名字必须是 WEP。且它可以被包 括在 DLL 模块定义文件的 EXPORTS 段中。 2、模块定义文件(.DEF)的结构和各段的意义 模块定义文件的结构如下:/*/ /* 文件名: example.DEF */*/ LIBRARY exam

7、ple /* DLLname */ DESCRIPTION example.DLL EXETYPE WINDOWS CODE PRELOAD MOVEABLE DISCARDABLE DATA PRELOAD MOVEABLE SINGLE HEAPSIZE 1024 EXPORTS example 1 WEP 2关键字 LIBRARY 是把这个模块视为一个 DLL,库的名字 example 跟在其后,且必 须与该库的名字、DEF 中的 DLL 的文件名相一致。DESCRIPTION 语句采用一个字符串, 其长度可达 128 个字符,通常用它来保存模块描述的信息。EXETYPE windows

8、 语句每 个 windows 应用程序和 DLL 都需要。DATA 语句定义该库数据段的内存属性,关键字 MOVEABLE 允许内存管理程序在 必要时移动内存段,关键字 SINGLE 是 DLL 必要,因为 DLL 总是有一个单一数据段,而不管访 问它的应用程序的数量。HEAPSIZE 语句用来定 义一个 DLL 局部堆的初始规模,执行局部内 存分配的 DLL 必须在库启动时使该堆初始 化,堆的大小被传送给 DLL 的 LiEntry 的程序。然 后用该堆的大小调用 Locallnit 使 DLL 的局部堆初始化。 EXEPORTS 语句定义将被用作来自应用程序或来自其它 DLL 入口 点的程

9、序,windows 利用这个信息建立一个序数入口值,序数入口值是一个优化的值, 允许动态连接机制更快块操作且使用较少的内存。 一般来说,模块定义文件(.DEF) 的结构除取动态库的名字不同外,其它结构都是固定的。 3建立原形函数文件(.H) 原形函数的功能是进一步声明调用函数的函数名和传递的参数,其形式为:/*/ /* 文件名: example.H */*/ extern “C“ int _export FAR PASCAL example(int param1,.,char param n) ;4建立工程文件(.PRJ)工程文件中包含有 example.C、example.DEF 两个文件后

10、,然后编译连接生成 动态链接库即可。以上是制作动态连接库的框架,现在通过一个实例介绍制作动态链接库的方法。 如要求程序完成功能为:打开一个数据文件读出前两个数据,将这两个数与所传递的 两个参数相加,返回它们的和。设该 DLL 程序的名字为 ADD。 第一步:在 Borland C+环境下编辑.C 文件、.DEF 文件和.H 文件,并建立.PRJ 文件。 如 (1)编写 C 语言源程序清单:/*/* 文件名: ADD.C */*/ #include #include #include #include #include #include #include #include #include “c

11、:ADD.h“ /*入口函数*/int FAR PASCAL LibMain (HANDLE hInstance , WORD wDataSeg , WORD cbHeapSize, LPSTR lpszCmdLine ) if (cbHeapSize!=0) UnlockData(0); return 1; /*输出函数*/int FAR PASCAL ADD(int x,int y,char *filein) int a,b;fp=fopen(filein,“r“); if(fp=NULL) exit(0); int temp1=0,temp2=0; fscanf(fp,“%d“, fsc

12、anf(fp,“%d“, temp1=x+a; temp2=y+b; temp1=temp1+temp2; fclose(fp);return(temp1); /*退出函数*/int FAR PASCAL WEP ( int/*SystemExit*/ ) return(1); 2)ADD.DEF 文件的程序清单: /*/ /* 文件名: ADD.H */*/ LIBRARY ADD DESCRIPTION ADD.DLL EXETYPE WINDOWS CODE PRELOAD MOVEABLE DISCARDABLE DATA PRELOAD MOVEABLE SINGLE HEAPSIZ

13、E 1024 EXPORTS ADD 1 WEP 2 (3)ADD.H 程序清单:/*/ /* 文件名: ADD.H */*/ extern “C“ int _export FAR PASCAL add(int x,int y,char *filein) ; (4)建立工程文件: 在 Borland C+环境下的 project 项中打开 open project file 项并建立 ADD.prj,在 add item 中加入 ADD.C 文件和 ADD.DEF 文件即可建立工程文件。第二步,在 Borland C 的 options 项的 Applation 中选择 Windows DLL

14、,再在 Compile 中选择 Build all, 这样就可生成动态链接库 ADD.DLL 供 VB 调用。 三、VB3.0 调用动态链接库 DLL 方法 制作好 DLL 之后,就可以用 VB 调用它,实现 VB 调用 C 程序。VB 程序要使用 DLL 中的函数, 首先必须要有特殊的声明,用 Declare 声明语句在窗体级或模块级或 全局模块的代码声明段进行声明,将动态链接库中的函数声明到 VB 中,供 VB 程序调 用。语句格式为:Declare Sub 过程名 Lib 摽鈹黚_n Alias “ 别名(ByVal 参数 AS 类型),或为 Declare Function 函数名 Lib 摽鈹黚_衃 Alias “ 别名(ByVal 参数 AS 类型)AS 类型在声明中首先用 Declare 关键字表示声明 DLL 中的函数。在 C 语言中有的函数类型为 VOID,它表示不具有返回值,则必须用关键字 Sub 将其声明成 过程。有的函数具有返回值,则必须用关键字 Function 将其声明成函数,并且在声明 语句的最后要用 AS 关键字指明函数返回值的类型。例如上面的 ADD.DLL 在 VB 中就可 以声明为:

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号