VB调用C程序的方法-动态链接库法_第1页
VB调用C程序的方法-动态链接库法_第2页
VB调用C程序的方法-动态链接库法_第3页
VB调用C程序的方法-动态链接库法_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

2、编写而成。那么如何发挥VB和这两种语言的优势,用VB设计一种良好的frinds界面来调用语言程序,即实现VB调用语言程序呢?现有的文献只提到动态链接库以下简称DLL可以将这两种语言连接起来,但有讲动态链接库DLL的制做及其编程方法。本文详细介绍了Brland环境下制作动态链接库以及VB调用frds动态链接库的的方法、步骤,并通过实例描绘VB调用程序的全过程。二、用Brland编写DLL程序的方法要想实现VB调用程序,首先需要用Brland编写动态连接库DLL程序假设DLL程序取名为exaple。动态链接库包含四个文件:语言源程序(.、模块定义文件.DEF、原型函数文件.H和工程文件.PRJ。下

3、面分别详细介绍一下这四种文件的详细构造。1、编写语言源程序的框架:语言源程序exaple.,它包括三种函数:入口函数、输出函数和终止函数。其详细构造如下:/*/*文件名:exaple.*/*/#inludeinds.h/*入口函数*/intFARPASALLibain(HANDLEhInstane,RDDataSeg,RDbHeapSize,LPSTRlpszdLine)if(bHeapSize!=0)UnlkData(0);return1;/*输出函数*/intFARPASALexaple(intpara1,.,harparan)./*语言应用程序*/*终止函数*/intFARPASALEP

4、(int/*SysteExit*/)return(1);以上各组成部分参数的含义:inds.h头文件,它包含有数据类型的定义、API入口点定义和其它有用的参数信息。PASAL说明符定义该程序的传递参数和净化堆栈的协定注意:DLL外部传送的指针必须是远指针FAR。Libain带四个参数:hInstane、DataSeg、bHeapSize和lpszdLine。第一个参数hInstane是DLL事例句柄,DataSeg参数是数据段DS存放器值,bHeapSize参数是在模块定义文件中定义的堆的大小,Libain使用该值使本地堆初始化。lpszdLine参数包括命令行信息,但很少被DLL使用。一般来

5、说,这四个参数是制作DLL通用的参数。假如不想让DLL数据被封住,那么必须调用unlkdata恢复正常的非锁状态,假如DLL初始化已经成功,DLL那么返回1,假设不成功那么返回0值,且DLL退出系统。DLL的输出函数实现用户所要完成的任务,这部分是DLL的核心。它与一般语言程序不同之处在于无sanf函数。所有的外部指针都是远指针FAR。画直线函数要用linet函数。DLL包括一个终止函数,终止函数有时称为退出函数,它的名字必须是EP。且它可以被包括在DLL模块定义文件的EXPRTS段中。2、模块定义文件.DEF)的构造和各段的意义模块定义文件的构造如下:/*/*文件名:exaple.DEF*/

6、*/LIBRARYexaple/*DLLnae*/DESRIPTINexaple.DLLEXETYPEINDSDEPRELADVEABLEDISARDABLEDATAPRELADVEABLESINGLEHEAPSIZE1024EXPRTSexaple1EP2关键字LIBRARY是把这个模块视为一个DLL,库的名字exaple跟在其后,且必须与该库的名字、DEF中的DLL的文件名相一致。DESRIPTIN语句采用一个字符串,其长度可达128个字符,通常用它来保存模块描绘的信息。EXETYPEinds语句每个inds应用程序和DLL都需要。DATA语句定义该库数据段的内存属性,关键字VEABLE允

7、许内存管理程序在必要时挪动内存段,关键字SINGLE是DLL必要,因为DLL总是有一个单一数据段,而不管访问它的应用程序的数量。HEAPSIZE语句用来定义一个DLL部分堆的初始规模,执行部分内存分配的DLL必须在库启动时使该堆初始化,堆的大小被传送给DLL的LiEntry的程序。然后用该堆的大小调用Lallnit使DLL的部分堆初始化。EXEPRTS语句定义将被用作来自应用程序或来自其它DLL入口点的程序,inds利用这个信息建立一个序数入口值,序数入口值是一个优化的值,允许动态连接机制更快块操作且使用较少的内存。一般来说,模块定义文件.DEF)的构造除取动态库的名字不同外,其它构造都是固定

8、的。3建立原形函数文件(.H)原形函数的功能是进一步声明调用函数的函数名和传递的参数,其形式为:/*/*文件名:exaple.H*/*/externint_exprtFARPASALexaple(intpara1,.,harparan);4建立工程文件(.PRJ)工程文件中包含有exaple.、exaple.DEF两个文件后,然后编译连接生成动态链接库即可。以上是制作动态连接库的框架,如今通过一个实例介绍制作动态链接库的方法。如要求程序完成功能为:翻开一个数据文件读出前两个数据,将这两个数与所传递的两个参数相加,返回它们的和。设该DLL程序的名字为ADD。第一步:在Brland+环境下编辑.文

9、件、.DEF文件和.H文件,并建立.PRJ文件。如1编写语言源程序清单:/*/*文件名:ADD.*/*/#inludeistrea.h#inludeni.h#inludei.h#inludeall.h#inludestdlib.h#inludeinds.h#inludeath.h#inludestdi.h#inlude:ADD.h/*入口函数*/intFARPASALLibain(HANDLEhInstane,RDDataSeg,RDbHeapSize,LPSTRlpszdLine)if(bHeapSize!=0)UnlkData(0);return1;/*输出函数*/intFARPASALA

10、DD(intx,inty,har*filEin)inta,b;fp=fpen(filein,r);if(fp=NULL)exit(0);inttep1=0,tep2=0;fsanf(fp,%d,a);fsanf(fp,%d,b);tep1=x+a;tep2=y+b;tep1=tep1+tep2;flse(fp);return(tep1);/*退出函数*/intFARPASALEP(int/*SysteExit*/)return(1);2ADD.DEF文件的程序清单:/*/*文件名:ADD.H*/*/LIBRARYADDDESRIPTINADD.DLLEXETYPEINDSDEPRELADVEA

11、BLEDISARDABLEDATAPRELADVEABLESINGLEHEAPSIZE1024EXPRTSADD1EP23ADD.H程序清单:/*/*文件名:ADD.H*/*/externint_exprtFARPASALadd(intx,inty,har*filein);4建立工程文件:在Brland+环境下的prjet项中翻开penprjetfile项并建立ADD.prj,在addite中参加ADD.文件和ADD.DEF文件即可建立工程文件。第二步,在Brland的ptins项的Applatin中选择indsDLL,再在pile中选择Buildall,这样就可生成动态链接库ADD.DLL供

12、VB调用。三、VB3.0调用动态链接库DLL方法制作好DLL之后,就可以用VB调用它,实现VB调用程序。VB程序要使用DLL中的函数,首先必需要有特殊的声明,用Delare声明语句在窗体级或模块级或全局模块的代码声明段进展声明,将动态链接库中的函数声明到VB中,供VB程序调用。语句格式为:DelareSub过程名Lib摽鈹黚_nAlias别名ByVal参数AS类型,或为DelareFuntin函数名Lib摽鈹黚_衃Alias别名ByVal参数AS类型AS类型在声明中首先用Delare关键字表示声明DLL中的函数。在语言中有的函数类型为VID,它表示不具有返回值,那么必须用关键字Sub将其声明成过程。有的函数具有返回值,那么必须用关键字Funtin将其声明成函数,并且在声明语句的最后要用AS关键字指明函数返回值的类型。例如上面的ADD.DLL在VB中就可以声明为:DelareFuntinADDLib撫:ADD.dll敚ByValXASInteger

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论