在用PowerBuilder开发应用程序时,常常须要调用动态连接库DLL,本文介绍了动态连接库的基本特色,给出了VC++创建DLL以及在PowerBuilder中调用VC++建立的DLL函数的编程实例,实现了经过DLL链接PowerBuilder和VC++编制的不一样程序的目的。 数据库
1、 DLL概述: 编程
---- 动态连接库(Dynamic-Link Library),简称DLL,是基于Windows程序设计的一个很是重要的组成部分。使用DLL有许多优势:浏览器
(1)使用DLL的动态链接不是将库代码拷贝,只在程序中记录函数的入口点和接口,在程序执行时才将库代码装入内存,若是有多个程序使用相同的DLL,也只需将DLL在内存中装载一次,节省了内存开销。框架
(2)DLL是基于Windows的程序模块,它不只包含可执行代码,还能够包含数据,各类资源,扩大了库文件的使用范围。编程语言
(3)对于一个大型的、不断更新的应用程序,能够将许多重复的功能写成DLL,用主程序调用,这样既减小了开发的工做量,又提升了访问速度。ide
(4)DLL丰富了PowerScript语言的编程能力,可使用PowerScript函数集以外的函数。例如:用户可能编写图象处理系统来浏览文件并将其存放于数据库,该应用需使用浏览器,但用PowerScript语言未提供作这类工做的函数,为了操纵设备,须要与设备自己环境通讯,该环境通常是厂商提供的动态连接库。函数
(5)DLL独立于编程语言,大多数WINDOWS编程环境都容许主程序调用DLL中的函数。便可以用VC++、VB、PowerBuilder、Delphi、汇编语言等创建DLL,而后在不一样语言编制的应用程序中调用它。 ui
下面用一个实例说明经过DLL实现PowerBuilder程序和VC++程序之间的链接。spa
2、 VC++建立DLL 操作系统
---- 在VC++5.0中能够用MFC AppWizard自动生成Win32 DLL和MFC AppWizard DLL,启动VC以后,从File | New菜单项,选择New对话框中的Projects标签,选择新项目为MFC AppWizard(dll),输入工程名pbdll,点击OK按钮,弹出图1-1所示对话框,选择DLL类型为:Regular DLL using shared MFC DLL,而后点击Finish按钮。这样,AppWizard将自动建立一个包含基本要素的DLL框架,接着手工添加代码。
图1-1 (略)自动生成的MFC AppWizard DLL
打开pbdll.cpp文件,添加以下函数:
extern "C " _declspec ( dllexport )
int PASCAL out_num(int x)
{
int y;
char msg[30];
y=x > > 2;
sprintf(msg, "计算结果:%o ! ", y);
::MessageBox(NULL, msg, "信息 ", MB_OK);
return 0;
}
以上声明了函数out_num(),输入参数为一个整型数,
做移位运算后,用对话框将计算结果显示出来。
接着打开pbdll.def文件,在EXPORTS下输入函数说明
out_num,文件内容以下:
LIBRARY "pbdll "
DESCRIPTION 'pbdll Windows Dynamic Link Library '
EXPORTS
; Explicit exports can go here
out_num @1
最后编译生成动态连接库pbdll.dll。
3、 在PowerBuilder中调用VC++建立的DLL函数
---- 为了在PowerBuilder应用程序中调用存放在动态连接库pbdll.dll中的函数out_num(),须要事先声明。在声明时要明确:
(1)函数的做用范围是全局的仍是局部的。全局声明可以使该函数用于整个应用,局部声明仅使该函数在对象的脚本中有效。
(2)必须指明函数返回的数据类型、传递参数的个数和类型,并将存放该函数的动态连接库的名字告诉PowerBuilder。
---- 声明完成后,应用程序能够调用函数out_num() ,调用该函数的代码与调用任何标准的PowerScript函数同样,区别在于:该函数存放在动态连接库中,调用它时,动态连接库装入内存,函数执行。
---- 下面是PowerBuilder中被调用函数的使用声明:
Function int out_num ( int irow ) LIBRARY "pbdll.dll "
在PowerBuilder中调用函数out_num()代码以下:
int irow,retcode
irow=dw_1.rowcount()
retcode=out_num(irow)
4、 加载DLL
---- 当PowerBuilder应用程序调用外部函数时,动态连接库装入内存。操做系统会在以下位置查找动态连接库:
(1)EXE文件运行的目录。
(2)Windows的系统目录。
若是没有找到DLL,应用程序将产生运行错误,显示一个对话框,若是找到DLL,它就被映射到程序的内存空间