Windows动态连接库是包含数据和函数的模块,可以被其它可执行文件(EXE、DLL、OCX等)调用。动态连接库包含两种函数:输出(exported)函数和内部(internal)函数。输出函数可以被其它模块调用,而内部函数则只能在动态连接库内部使用。尽管动态连接库也能输出数据,但实际上它的数据通常是只在内部使用的。使用动态连接库的优点是显而易见的。将应用程序的一部分功能提取出来做成动态连接库,不但减小了主应用程序的大小,提高了程序运行效率,还使它更加易于升级。多个应用程序共享一个动态连接库还能有效地节省系统资源。正因为如此,在Windows系统中,动态连接库得到了大量的使用。
一般来说,动态连接库都是以DLL为扩展名的文件,如Kernel32。dll、commdlg。dll等。但也有例外,如16位Windows的核心部件之一GDI。exe其实也是一个动态库。编写动态连接库的工具很多,如VisualC++、BorlandC++、Delphi等,具体方法可以参见相关文档。下面只以VisualC++5。0为例,介绍一下开发应用于VisualBasic5。0的动态连接库时应注意的问题(本文中所有涉及C/C++语言或编译环境的地方,都以VC5为例;所有涉及VisualBasic的地方都以VB5为例)。
作为一种32位Windows应用程序的开发工具,VB5生成的exe文件自然也都是32位的,通常情况下也只能调用32位的动态连接库。但是,并不是所有的32位动态库都能被VB生成的exe文件正确地识别。一般来说,自己编写用于VB应用程序调用的动态连接库时,应注意以下几个方面的问题:
1、生成动态库时要使用__stdcall调用约定,而不能使用缺省的__cdecl调用约定;__stdcall约定通常用于32位API函数的调用。
2、在VC5中的定义文件(。def)中,必须列出输出函数的函数名,以强制VC5系统将输出函数的装饰名(decoratedname)改成普通函数名;所谓装饰名是VC的编译器在编译过程中生成的输出函数名,它包含了用户定义的函数名、函数参数及函数所在的类等多方面的信息。由于在VC5中定义文件不是必需的,因此工程不包含定义文件时VC5就按自己的约定将用户定义的输出函数名修改成装饰名后放到输出函数列表中,这样的输出函数在VB生成的应用程序中是不能正确调用的(除非声明时使用Alias子句)。因此需要增加一个。def文件,其中列出用户需要的函数名,以强制VC5不按装饰名进行输出。
3、VC5中的编译选项'结构成员对齐方式(structurememberalignment)'应设成4字节,其原因将在后文详细介绍。
4、由于在C中整型变量是4个字节,而VB中的整型变量依然只有2个字节,因此在C中声明的整型(int)变量在VB中调用时要声明为长整型(long),而C中的短整型(short)在VB中则要声明成整型(integer);下表针对最常用的C语言数据类型列出了与之等价的VisualBasic类型(用于32位版本的Windows)。
C语言数据类型在VisualBasic中声明为调用时使用的表达式
ATOMByValvariableAsInteger结果为Integer类型的表达式
BOOLByValvariableAsLong结果为Long类型的表达式
BYTEByValvariableAsByte结果为Byte类型的表达式
CHARByValvariableAsByte结果为Byte类型的表达式
COLORREFByValvariableAsLong结果为Long类型的表达式
DWORDByValvariableAsLong结果为Long类型的表达式
HWND,HDC,HMENUByValvariableAsLong结果为Long类型的表达式等Windows句柄
INT,UINTByValvariableAsLong结果为Long类型的表达式
LONGByValvariableAsLong结果为Long类型的表达式
LPARAMByValvariableAsLong结果为Long类型的表达式
LPDWORDvariableAsLong结果为Long类型的表达式
LPINT,LPUINTvariableAsLong结果为Long类型的表达式
LPRECTvariableAstype自定义类型的任意变量
LPSTR,LPCSTRByValvariableAsString结果为String类型的表达式
LPVOIDvariableAsAny任何变量(在传递字符串的时候使用ByVal)
LPWORDvariableAsInteger结果为Integer类型的表达式
LRESULTByValvariableAsLong结果为Long类型的表达式
【VisualBasic辅导:在VB中调用动态连接库】相关文章:
2017年12月英语四级翻译练习题库之798艺术区02-06
浙教版五年级上册英语期中试卷02-06
09中考英语命题作文 C02-06
我梦想中的房子高考英语作文02-06
初中英语听力训练材料02-06
BEC高级写作部分综合指导(十)02-06
2023年内蒙古包头中考总分多少,各科都是多少分?02-06
小学必会的Be动词的用法语法知识02-06
高中生英语作文:为什么人们选择网购02-06
中级人力资源专业知识与实务练习题(7)02-06
