vb c 语言窗口设置,本文介绍了一种实现VB调用C语言程序的方法

2dc68161513719580bfb4f236dcf91a4.gif

本文介绍了一种实现VB调用C语言程序的方法-动态链接库方法,给出了动态链接库生成的一般框架,并通过示例描述了动态链接库的实现及其制造方法和编程步骤. 该方法具有普遍意义. 关键字VB动态链接库DLL C程序1.简介Visual Basic(以下称为VB)是一种可视化的面向对象的编程语言,由于其简单而快速的编程,在WINDOWS程序员中很流行. 使用VB开发具有友好界面和方便操作的软件仅需很短时间. 但是,VB运行速度很慢. 对于巨大的科学计算问题,VB缓慢的速度将使人们难以忍受. C语言是一种非常流行的国际中间编程语言. 由于其灵活性和高效率而被广泛使用. 在DOS环境下,许多应用程序都是用C语言编写的. 那么如何利用VB和C这两种语言,为Windows与VB的接口设计一个好的调用C语言程序,即实现VB调用C语言程序呢?现有文献仅提及动态链接库(以下称为DLL)可以连接这两种语言,但是关于动态链接库DLL的制造和编程方法进行了讨论. 本文详细介绍了在Borland C环境下制作动态链接库和VB调用dos动态链接库的方法和步骤,并通过示例描述了VB调用C程序的整个过程.

01b4374653576f7c7ef5ce58edddc3c6.png

第二,用Borland C编写DLL程序的方法. 要实现VB调用C程序,首先需要用Borland C编写动态链接库DLL程序(假设DLL程序名为example). 动态链接库包含四个文件: C语言源程序(.C),模块定义文件(.DEF),原型函数文件(.H)和​​项目文件(.PRJ). 下面将详细介绍这四个文件的具体结构. 1.编写C语言源程序的框架: C语言源程序(example.C),包括三个功能: 输入功能,输出功能和终止功能. 其具体结构如下: / ************************************* // *文件名: 示例.C * / / ************************************* / #include / ***********输入函数*********** / int FAR PASCAL LibMain(HANDLE hInstance,WORD wDataSeg,WORD cbHeapSize,LPSTR lpszCmdLine){if(cbHeapSize! = 0)UnlockData(0); return(1);} / ***********输出函数*********** / int FAR PASCAL示例(int param1,...,char param n){. ..... / * C语言应用程序* /} / ***********终止功能*********** / int FAR PASCAL WEP(int / * SystemExit * / ){return(1);}以上组件的参数含义: Windows.h头文件,其中包含数据类型定义,API入口点定义和其他有用的参数信息.

1-484-png_6_0_0_202_428_459_339_892.979_1262.879-693-0-0-693.jpg

PASCAL说明符定义了程序的传输参数和用于净化堆栈的协议(注意: 从外部传输的指针必须是远指针FAR)LibMain具有四个参数: DLL. hInstance,wDataSeg,cbHeapSize和lpszCmdLine. 第一个参数hInstance是DLL实例句柄,wDataSeg参数是数据段(DS)寄存器值,bHeapSize参数是模块定义文件中定义的堆的大小,并且LibMain使用此值初始化本地堆. lpszCmdLine参数包含命令行信息,但DLL很少使用. 一般来说,这四个参数是制作DLL的常用参数. 如果您不想密封DLL数据,则必须调用unlockdata来恢复正常的非锁定状态. 如果DLL初始化成功,则DLL返回1;如果失败,则返回值0,然后DLL退出系统. DLL的输出功能实现了用户要完成的任务,这部分是DLL的核心. 它与普通的C语言程序不同,因为它没有scanf函数. 所有外部指针都是远指针FAR. 要绘制直线函数,请使用lineto函数. DLL包含终止功能. 终止函数有时称为退出函数,其名称必须为WEP.

642b337752c23a8d7a35bdd173d9f02d.png

它可以包含在DLL模块定义文件的EXPORTS部分中. 2.模块定义文件(.DEF)的结构和每个段的含义模块定义文件的结构如下: / ******************* ******* *********** / / *文件名: example.DEF * / / ******************** ******* ********** /库示例/ * DLLname * /描述'example.DLL'EXETYPE WINDOWS代码预加载可移动不可取数据预加载可移动单字节1024导出示例@ 1 WEP @ 2关键字LIBRARY用来将此模块视为DLL,随后是库名称示例,并且必须与DEF中的库名称和DLL的文件名一致. describe语句使用长度最多为128个字符的字符串. 它通常用于存储模块描述的信息. 每个Windows应用程序和DLL都需要EXETYPE Windows语句.

99e805603f3e93a35f931f5efdefadac.png

DATA语句定义库的数据段的内存属性. 关键字MOVEABLE允许内存管理程序在必要时移动内存段. 对于DLL,关键字SINGLE是必需的,因为DLL始终具有单个数据段,而不管对其的访问权限. 应用程序的数量. HEAPSIZE语句用于定义DLL本地堆的初始大小. 当库启动时,执行本地内存分配的DLL必须初始化堆,并且将堆大小转移到DLL的LiEntry程序中. 然后使用堆的大小来调用Locallnit来初始化DLL的本地堆. EXEPORTS语句定义将从应用程序或其他DLL入口点用作程序. Windows使用此信息来建立序数输入值. 序数输入值是一个优化值,允许动态链接机制更快地阻止操作并使用更少的内存. 通常,模块定义文件(.DEF)的结构是固定的,但动态库的名称除外. 3.创建原型函数文件(.H)原型函数的功能是进一步声明函数名称和调用函数的传递参数,格式为: / ************* ******** **************** / / *文件名: example.H * / / ************** ******** *************** // extern“ C” int _export FAR PASCAL示例(int param1,...同时调用2次vb程序,char参数n); 4.创建项目文件(.PRJ). 在项目文件包含example.C和example.DEF两个文件之后,进行编译和链接以生成动态链接库.

以上是制作动态链接库的框架. 现在,我们介​​绍一个如何制作动态链接库的示例. 如果需要程序完成功能: 打开一个数据文件以读取前两个数据,将这两个数字加到传递的两个参数中,然后返回它们的总和. 让DLL程序的名称为ADD. 第一步: 在Borland C ++环境中编辑.C文件,.DEF文件和.H文件,并创建.PRJ文件. 例如(1)编写C语言源程序的列表: / *************************************** ** / / *文件名: ADD.C * / / **************************************** * /#include #include #include #include #include #include #include #include #include“ c: \ 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”,&a); fscanf(fp,“%d”,&b); 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 * / / **************************************** /库添加描述'ADD.DLL' EXETYPE WINDOWS代码预加载可移动不可数据预加载可移动单字节1024导出添加@ 1 WEP @ 2(3)ADD.H程序列表: / ********************* ************* *** / / *文件名: ADD.H * / / ********************** ************* ** / extern“ C” int _export FAR PASCAL add(int x,int y,char * filein); (4)创建项目文件: 在Borland C ++环境中的项目项中打开打开的项目文件项,并创建ADD.prj,添加ADD.C文件和ADD.DEF文件以添加项目以创建项目文件.

第二步是在Borland C选项项目的“应用程序”中选择“ Windows DLL”,然后选择“在编译中全部编译”,以便可以生成动态链接库ADD.DLL以供VB调用. 三同时调用2次vb程序,VB3.0调用动态链接库DLL方法制作完DLL后,可以使用VB调用它来实现VB调用C程序. 若要使用DLL中的功能,VB程序必须首先具有特殊的声明. 在表单级或模块级或通用模块的代码声明部分中声明声明声明,并且动态链接库中的函数在VB中声明,以供VB程序调用. 语句格式为: 声明子过程名称Lib擽黍黚_n [Alias” Alias”([ByVal参数AS类型]),或声明函数功能名称Lib擽─黚__黚Alias” Alias]([ByVal参数AS类型])AS类型首先使用Declare关键字在DLL中声明函数. C语言中的函数类型为VOID,这意味着没有返回值,必须使用关键字Sub将其声明为过程. 某些函数具有返回值,必须使用关键字Function将该函数声明为一个函数,并使用AS关键字在语句末尾指示该函数返回值的类型.

例如,可以在VB中将上述ADD.DLL声明为: 声明函数ADD Lib c: \ ADD.dll戚―ByVal X AS整数,ByVal Y AS整数,ByVal文件作为字符串)AS整数传递此声明该语句在VB中声明了ADD函数,可以直接调用. 4.结论上面详细介绍了在Borland C环境下制作动态链接库和VB调用dos动态链接库的方法和步骤,并通过示例说明了VB调用V语言程序的方法. 示例程序ADD由VB3.0编译,并在486微型计算机上调试. 本文介绍的方法具有广泛的意义,也完全适用于C ++语言程序.

本文来自电脑杂谈,转载请注明本文网址:

http://www.pc-fly.com/a/tongxinshuyu/article-279619-1.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值