3.建立原形函数文件(.H) 原形函数的功能是进一步声明调用函数的函数名和传递的参数,其形式为: /*************************************/ /* 文件名: example.H */ /*************************************/ extern "C" int _export FAR PASCAL example(int param1,...,char param n) ; 4.建立工程文件(.PRJ) 工程文件中包含有example.C、example.DEF两个文件后,然后编译连接生成动态链接库即可。 以上是制作动态连接库的框架,现在通过一个实例介绍制作动态链接库的方法。如要求程序完成功能为:打开一个数据文件读出前两个数据,将这两个数与所传递的两个参数相加,返回它们的和。设该DLL程序的名字为ADD。 第一步:在Borland C++环境下编辑.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" /*入口函数*/ 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 */ /*************************************/ LIBRARY ADD DESCRIPTION 'ADD.DLL' EXETYPE WINDOWS CODE PRELOAD MOVEABLE DISCARDABLE DATA PRELOAD MOVEABLE SINGLE HEAPSIZE 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,在additem中加入ADD.C文件和ADD.DEF文件即可建立工程文件。 第二步,在Borland C的options项的Applation中选择Windows DLL,再在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中就可以声明为: Declare Function ADD Lib撫c:/ADD.dll敚―ByVal X AS Integer, ByVal Y AS Integer ,ByVal filein as string)AS Integer 通过此声明语句将函数ADD声明到VB中,便可直接调用。
四、结束语
以上详细介绍了Borland C环境下制作动态链接库以及VB调用for dos动态链接库的方法、步骤,并通过实例说明VB调用C语言程序的方法。举例程序ADD经VB3.0编译,在486微机上调试通过。本文介绍的方法具有广泛的意义,也完全适用于C++ 语言程序。 
2/2 首页 上一页 1 2 |