电信主站 网通分站
购买流程 付款方式 常见问题 在线提问 续租服务 购物车
用户名: 密 码: 忘记密码?
首 页
域名注册
虚拟主机
双线主机
服务器租用
VPS主机
企业邮局
代理专区
客服中心
虚拟主机行业资讯 虚拟主机评测对比 互联网最新动态 技术学院 站长资讯 在线教程 网站运营
搜索优化 服务器 网络编程 图形图象 站长之家 网页制作 操作系统
冲浪宝典 软件教学 视频通信 办公软件 邮件系统 网络安全 认证考试
您当前位置:西部数码->资讯中心-> 站长之家-> 营销推广
vb调用c程序动态链接库的方法_visualbasic教程
作者:网友供稿 点击:0
  西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!虚拟主机可在线rar解压,自动数据恢复设置虚拟目录等.虚拟主机免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金!
文章页数:[1] 
摘要
文中介绍了一种实现VB调用C语言程序的方法-动态连接库法,给出了动态链接库制作的一般框架,通过实例描述了动态连接库的实现及其制做方法、编程步骤,这种方法具有普遍的意义。

关键词:VB,动态连接库DLL,C程序

一、引言

VisualBasic(以下简称VB)是一种可视化的面向对象的编程语言,以其编程简单、快捷等特点,深受广大WINDOWS程序员的青睐。利用VB开发界面友好、操作方便的软件只需很短的时间。但是VB运行速度较慢,对于庞大的科学计算问题,VB的这种慢速会使人难以忍受。C语言是国际上非常流行的一种中级编程语言,以其灵活、高效等优点而获得广泛应用,许多的应用程序都是用C语言在DOS环境下编写而成。那么如何发挥VB和C这两种语言的优势,用VB设计一种良好的forwindows界面来调用C语言程序,即实现VB调用C语言程序呢?现有的文献只提到动态链接库(以下简称DLL)可以将这两种语言连接起来,但没有讲动态链接库DLL的制做及其编程方法。本文详细介绍了BorlandC环境下制作动态链接库以及VB调用fordos动态链接库的的方法、步骤,并通过实例描述VB调用C程序的全过程。

二、用BorlandC编写DLL程序的方法

要想实现VB调用C程序,首先需要用BorlandC编写动态连接库DLL程序(假设DLL程序取名为example)。动态链接库包含四个文件:C语言源程序(.C)、模块定义文件(.DEF)、原型函数文件(.H)和工程文件(.PRJ)。下面分别详细介绍一下这四种文件的具体结构。
1、编写C语言源程序的框架:
C语言源程序(example.C),它包括三种函数:入口函数、输出函数和终止函数。其具体结构如下:
/*************************************/
/*文件名:example.C*/
/*************************************/
#include<windows.h>
/***********入口函数***********/
intFARPASCALLibMain(HANDLEhInstance,
WORDwDataSeg,
WORDcbHeapSize,
LPSTRlpszCmdLine)
{
if(cbHeapSize!=0)
UnlockData(0);
return(1);
}

/***********输出函数***********/

intFARPASCALexample(intparam1,...,charparamn)
{
....../*C语言应用程序*/
}
/***********终止函数***********/
intFARPASCALWEP(int/*SystemExit*/)
{
return(1);
}
以上各组成部分参数的含义:Windows.h头文件,它包含有数据类型的定义、API入口点定义和其它有用的参数信息。PASCAL说明符定义该程序的传递参数和净化堆栈的协定(注意:DLL外部传送的指针必须是远指针FAR)。LibMain带四个参数:
hInstance、wDataSeg、cbHeapSize和lpszCmdLine。第一个参数hInstance是DLL事例句柄,wDataSeg参数是数据段(DS)寄存器值,cbHeapSize参数是在模块定义文件中定义的堆的大小,LibMain使用该值使本地堆初始化。lpszCmdLine参数包括命令行信息,但很少被DLL使用。一般来说,这四个参数是制作DLL通用的参数。
如果不想让DLL数据被封住,那么必须调用unlockdata恢复正常的非锁状态,如果DLL初始化已经成功,DLL则返回1,若不成功则返回0值,且DLL退出系统。
DLL的输出函数实现用户所要完成的任务,这部分是DLL的核心。它与一般C语言程序不同之处在于无scanf函数。所有的外部指针都是远指针FAR。画直线函数要用lineto函数。
DLL包括一个终止函数,终止函数有时称为退出函数,它的名字必须是WEP。且它可以被包括在DLL模块定义文件的EXPORTS段中。
2、模块定义文件(.DEF)的结构和各段的意义
模块定义文件的结构如下:
/*************************************/
/*文件名:example.DEF*/
/*************************************/
LIBRARYexample/*DLLname*/
DESCRIPTIONexample.DLL
EXETYPEWINDOWS
CODEPRELOADMOVEABLEDISCARDABLE
DATAPRELOADMOVEABLESINGLE
HEAPSIZE1024
EXPORTS
example@1
WEP@2
关键字LIBRARY是把这个模块视为一个DLL,库的名字example跟在其后,且必须与该库的名字、DEF中的DLL的文件名相一致。DESCRIPTION语句采用一个字符串,其长度可达128个字符,通常用它来保存模块描述的信息。EXETYPEwindows语句每个windows应用程序和DLL都需要。DATA语句定义该库数据段的内存属性,关键字MOVEABLE允许内存管理程序在必要时移动内存段,关键字SINGLE是DLL必要,因为DLL总是有一个单一数据段,而不管访问它的应用程序的数量。HEAPSIZE语句用来定义一个DLL局部堆的初始规模,执行局部内存分配的DLL必须在库启动时使该堆初始化,堆的大小被传送给DLL的LiEntry的程序。然后用该堆的大小调用Locallnit使DLL的局部堆初始化。
EXEPORTS语句定义将被用作来自应用程序或来自其它DLL入口点的程序,windows利用这个信息建立一个序数入口值,序数入口值是一个优化的值,允许动态连接机制更快块操作且使用较少的内存。
一般来说,模块定义文件(.DEF)的结构除取动态库的名字不同外,其它结构都是固定的。
3.建立原形函数文件(.H)
原形函数的功能是进一步声明调用函数的函数名和传递的参数,其形式为:
/*************************************/
/*文件名:example.H*/
/*************************************/
extern"C"int_exportFARPASCALexample(intparam1,...,charparamn);
4.建立工程文件(.PRJ)
工程文件中包含有example.C、example.DEF两个文件后,然后编译连接生成动态链接库即可。
以上是制作动态连接库的框架,现在通过一个实例介绍制作动态链接库的方法。如要求程序完成功能为:打开一个数据文件读出前两个数据,将这两个数与所传递的两个参数相加,返回它们的和。设该DLL程序的名字为ADD。
第一步:在BorlandC 环境下编辑.C文件、.DEF文件和.H文件,并建立.PRJ文件。如
(1)编写C语言源程序清单:
/*************************************/
/*文件名:ADD.C*/
/*************************************/
#include<iostream.h>
#include<conio.h>
#include<io.h>
#include<alloc.h>
#include<stdlib.h>
#include<windows.h>
#include<math.h>
#include<stdio.h>
#include"c:\ADD.h"
/*入口函数*/
intFARPASCALLibMain(HANDLEhInstance,
WORDwDataSeg,
WORDcbHeapSize,
LPSTRlpszCmdLine)
{
if(cbHeapSize!=0)
UnlockData(0);
return1;
}
/*输出函数*/
intFARPASCALADD(intx,inty,char*filein)
{inta,b;
fp=fopen(filein,"r");
if(fp==NULL){exit(0);}
inttemp1=0,temp2=0;
fscanf(fp,"d",&a);
fscanf(fp,"d",&b);
temp1=x a;
temp2=y b;
temp1=temp1 temp2;
fclose(fp);
return(temp1);
}
/*退出函数*/
intFARPASCALWEP(int/*SystemExit*/)
{
return(1);
}
2)ADD.DEF文件的程序清单:
/*************************************/
/*文件名:ADD.H*/
/*************************************/
LIBRARYADD
DESCRIPTIONADD.DLL
EXETYPEWINDOWS
CODEPRELOADMOVEABLEDISCARDABLE
DATAPRELOADMOVEABLESINGLE
HEAPSIZE1024
EXPORTS
ADD@1
WEP@2
(3)ADD.H程序清单:
/*************************************/
/*文件名:ADD.H*/
/*************************************/
extern"C"int_exportFARPASCALadd(intx,inty,char*filein);
(4)建立工程文件:
在BorlandC 环境下的project项中打开openprojectfile项并建立ADD.prj,在add
item中加入ADD.C文件和ADD.DEF文件即可建立工程文件。
第二步,在BorlandC的options项的Applation中选择WindowsDLL,再在Compile中选择Buildall,这样就可生成动态链接库ADD.DLL供VB调用。

三、VB3.0调用动态链接库DLL方法

制作好DLL之后,就可以用VB调用它,实现VB调用C程序。VB程序要使用DLL中的函数,首先必须要有特殊的声明,用Declare声明语句在窗体级或模块级或全局模块的代码声明段进行声明,将动态链接库中的函数声明到VB中,供VB程序调用。
语句格式为:DeclareSub过程名Lib[Alias"别名]([ByVal参数AS类型]),或为DeclareFunction函数名Lib[Alias"别名]([ByVal参数AS类型])AS类型在声明中首先用Declare关键字表示声明DLL中的函数。在C语言中有的函数类型为VOID,它表示不具有返回值,则必须用关键字Sub将其声明成过程。有的函数具有返回值,则必须用关键字Function将其声明成函数,并且在声明语句的最后要用AS关键字指明函数返回值的类型。
例如上面的ADD.DLL在VB中就可以声明为:
DeclareFunctionADDLibc:\ADD.dll―ByValXASInteger,ByValYASInteger,ByValfileinas
string)ASInteger
通过此声明语句将函数ADD声明到VB中,便可直接调用。

四、结束语

以上详细介绍了BorlandC环境下制作动态链接库以及VB调用fordos动态链接库的方法、步骤,并通过实例说明VB调用C语言程序的方法。举例程序ADD经VB3.0编译,在486微机上调试通过。本文介绍的方法具有广泛的意义,也完全适用于C 语言程序。

->


文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
相关主题
文章页数:[1] 
Google
热门文章
·全球十大搜索引擎_营销推广
·电子商务网站推广10大方法_营销推广
·教你几招如何阻止windwos xp蓝屏发生_windows xp
·用sysprep自动实现windows xp成功部署_windows xp
·google 搜索引擎和网站的目录结构_营销推广
·google排名搜索引擎优化之url篇_营销推广
·注册搜索引擎问与答_营销推广
·网络营销与传统营销、网络企业与传统企业_营销推广
·初学photoshop的“三板斧”_photoshop教程
·一个网站的优与劣,计数器说明不了问题_营销推广

最新文章
·b2c独立网店如何推广_营销推广
·链接的12种类型和获取方法_营销推广
·快速推广行业b2b网站6个基本要点_营销推广
·王通:网站推广的18种秘笈_营销推广
·视频分享网站视频广告发展面临的问题_营销推广
·难以置信,这样的网站每月盈利上千万_营销推广
·在xp下享受windows vista屏保待遇_windows xp
·企业网站赢利模式的思考_营销推广
·外贸企业如何从零开始做网络营销(一)_营销推广
·写给站长和网络营销人_营销推广


 
 


版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
  打印  刷新  关闭
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 虚拟主机 | 资讯中心 | 友情链接 | 网站地图

版权所有 西部数码(www.west263.com)
CopyRight (c) 2002~2006 west263.com all right reserved.
公司地址:四川成都市万和路90号天象大厦4楼 邮编:610031
电话总机:028-86262244 86263048 86263408 86263960 86264018 86267838
售前咨询:总机转201 202 203 204 206 208
售后服务:总机转211 212 213 214
财务咨询:总机转224 223 传真:028-86264041 财务QQ:点击发送消息给对方635483282
售前咨询QQ:点击发送消息给对方2182518 点击发送消息给对方241975952 点击发送消息给对方275026793 点击发送消息给对方408235859
售后服务QQ:点击发送消息给对方17708515 点击发送消息给对方307742704 点击发送消息给对方287976517 点击发送消息给对方363783715
《中华人民共和国增值电信业务经营许可证》编号:川B2-20030065号