目录
一.DLL概述: 动态链接库(Dynamic-Link Library),简称DLL,是基于Windows系统平台下程序设计的一个非常重要的组成部分。使用DLL有许多优点:
四.加载DLL ---- 当PowerBuilder应用程序调用外部函数时,动态链接库装入内存。操作系统会在如下位置查找动态链接库:
五.PB中在哪儿声明外部函数?Local External Function
一.DLL概述:
动态链接库(Dynamic-Link Library),简称DLL,是基于Windows系统平台下程序设计的一个非常重要的组成部分。使用DLL有许多优点:
(1)使用DLL的动态连接不是将库代码拷贝,只在程序中记录函数的入口点和接口,在程序执行时才将库代码装入内存,如果有多个程序使用相同的DLL,也只需将DLL在内存中装载一次,节省了内存开销。
(2)DLL是基于Windows的程序模块,它不仅包含可执行代码,还可以包含数据,各种资源,扩大了库文件的使用范围。
(3)对于一个大型的、不断更新的应用程序,可以将许多重复的功能写成DLL,用主程序调用,这样既减少了开发的工作量,又提高了访问速度。
(4)DLL丰富了PowerScript语言的编程能力,可以使用PowerScript函数集之外的函数,增强数据库开发工具PowerBuilder各方面开发的能力。例如:如访问系统底层或外接设备的功能,用PowerScript语言未提供做这类工作的函数,为了操纵设备,需要与设备本身环境通信,该环境一般是厂商提供的各类动态链接库。
(5)DLL独立于编程语言,大多数WINDOWS编程环境都允许主程序调用DLL中的函数。即可以用VC++、VB、PowerBuilder、Delphi、汇编语言等建立DLL,然后在不同开发语言开发的应用程序中调用它。
下面用一个实例说明通过DLL实现PowerBuilder程序和C++ DLL之间的调用。
二. Visual Studio中创建的C++ DLL
---- 在Microsoft Visual Studio 中可以安装C++开发环境,可以生成C++ DLL,启动VS之后,从文件 | 新建 菜单项,选择C++,选择动态链接库(DLL)下一步,这样,VS将自动创建一个包含基本要素的DLL框架,接着手工添加代码。
如下图:
打开Mydll.cpp文件,添加如下函数:
int _stdcall test01(int a,int b,int c)
{
return a+b+c;
}
以上声明了函数test01(),输入参数为一个整型数,
作移位运算后,用对话框将计算结果显示出来。
接着打开Mydll.h文件,添加导出函数说明:
extern "C" _declspec(dllexport) int _stdcall test01(int a,int b,int c);
最后编译生成动态链接库Mydll.dll。
三.在PowerBuilder中调用VS创建的C++ DLL函数
---- 为了在PowerBuilder应用程序中调用存放在动态链接库pbdll.dll中的函数out_num(),需要事先声明。在声明时要明确:
(1)函数的作用范围是全局的还是局部的。全局声明可使该函数用于整个应用,局部声明仅使该函数在对象的脚本中有效。
(2)必须指明函数返回的数据类型、传递参数的个数和类型,并将存放该函数的动态链接库的名字告诉PowerBuilder。
---- 声明完成后,应用程序可以调用函数out_num() ,调用该函数的代码与调用任何标准的PowerScript函数一样,区别在于:该函数存放在动态链接库中,调用它时,动态链接库装入内存,函数执行。
---- 下面是PowerBuilder中被调用函数的使用声明:
Function int test01( int a,int b,int c) LIBRARY "Mydll.dll "
在PowerBuilder中调用函数test01()代码如下:
int retcode
retcode=out_num(1,2,3)
四.加载DLL
---- 当PowerBuilder应用程序调用外部函数时,动态链接库装入内存。操作系统会在如下位置查找动态链接库:
(1)EXE文件运行的目录。
(2)Windows的系统目录。
(3)系统环境变量目录。
如果没有找到DLL,应用程序将产生运行错误,显示一个对话框,如果找到DLL,它就被映射到程序的内存空间
五.PB中在哪儿声明外部函数?
Local External Function
Global External Function