1 / 19
文档名称:

在vb中调用dll的方法.doc

格式:doc   页数:19页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

在vb中调用dll的方法.doc

上传人:xxj16588 2016/2/14 文件大小:0 KB

下载得到文件列表

在vb中调用dll的方法.doc

文档介绍

文档介绍:1制作好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关键字指明函数返回值的类型。:DeclareFunctionADDLib“c:\”(ByValXASInteger,ByValYASInteger,ByValfileinasstring)ASInteger通过此声明语句将函数ADD声明到VB中,便可直接调用。2、dll文件中的函数好像是C语言写的,//函数名:o(int*o)//功能:获取卡机的卡机号(单机时)//参数:o[0]-被读出的卡机号//返回值:0-成功,//2-PC接收超时,//3-*o是指针吗?在VB中应该怎么声明和调用该函数?VB里也可以定义指针吗?问题补充:vb调用dll文件中的函数我是会的,但这儿的形参有一个星号才不知是怎么一回事,我是这样声明的对吗?"(oAsInteger)AsInteger又应该怎么调用呢?要先定义一个指针的变量再传给*o还是要怎么做?o是被读出的卡机号,那么就是传址的了。dimlasintegerdimmasintegerl=o(m)ifl=="卡机号:"&melseifl=2thenmsgbox"PC接收超时"elseifl=3thenmsgbox"应答错误"endifWindows动态连接库是包含数据和函数的模块,可以被其它可执行文件(EXE、DLL、OCX等)调用。动态连接库包含两种函数:输出(exported)函数和内部(internal)函数。输出函数可以被其它模块调用,而内部函数则只能在动态连接库内部使用。尽管动态连接库也能输出数据,但实际上它的数据通常是只在内部使用的。使用动态连接库的优点是显而易见的。将应用程序的一部分功能提取出来做成动态连接库,不但减小了主应用程序的大小,提高了程序运行效率,还使它更加易于升级。多个应用程序共享一个动态连接库还能有效地节省系统资源。正因为如此,在Windows系统中,动态连接库得到了大量的使用。一般来说,动态连接库都是以DLL为扩展名的文件,。但也有例外,。编写动态连接库的工具很多,如VisualC++、BorlandC++、Delphi等,具体方法可以参见相关文档。下面只以VisualC++,(本文中所有涉及C/C++语言或编译环境的地方,都以VC为例;所有涉及VisualBasic的地方都以VB为例)。作为一种32位Windows应用程序的开发工具,VB生成的exe文件自然也都是32位的,通常情况下也只能调用32位的动态连接库。但是,并不是所有的32位动态库都能被VB生成的exe文件正确地识别。一般来说,自己编写用于VB应用程序调用的动态连接库时,应注意以下几个方面的问题:1、生成动态库时要使用__stdcall调用约定,而不能使用缺省的__cdecl调用约定;__stdcall约定通常用于32位API函数的调用。2、在VC中的定义文件(.def)中,必须列出输出函数的函数名,以强制VC系统将输出函数的装饰名(decoratedname)改成普通函数名;所谓装饰名是VC的编译器在编译过程中生成的输出函数名,它包含了用户定义的函数名、函数参数及函数所在的类等多方面的信息。由于在VC中定义文件不是必需的,因此工程不包含定义文件时VC就按自己的约定将用户定义的输出函数名修改成装饰名后放到输出函数列表中,这样的输出函数在VB生成的应用程序中是不能正确调用的(除非声明时使用Alias子句)。,其中列出用户需要的函数名,以强制VC不按装饰名进行输出。3、VC中的编译选项"结构成员对齐方式(structurememberalignment)"应设成4字节,其原因将在后文详细介