pb调用vc写的动态链接库文件

PB是一种面向C/S方式的数据库应用程序的开发工具,PB拥有数据窗口、嵌入式SQL语句等技术,在开发数据库应用程序时显得特别方便。但在涉及到系统底层的一些功能时,PB本身提供的功能就有些不尽如人意。因为Windows操作系统提供给用户的接口是C语言函数形式,而VC在调用系统底层功能方面,从编程角度来讲就要方便得多。VC还有许多PB所不具备的优点,比如数据结构表达能力强,实现复杂算法的程序相对容易开发,运行速度快等。此外,不少外围设备的驱动程序提供的也是C接口。若能将这两种语言结合起来使用,充分发挥它们各自的优点,将会大大提高开发效率、增强应用程序的功能。 
动态链接库简述 
动态链接库(Dynamic-Link Library)简称DLL,是基于Windows系统的程序设计中的一个非常重要的组成部分。使用DLL的优点是: 
1. DLL的动态连接不是将库代码拷贝,而是在程序中记录函数的入口点和接口,在程序执行时才将库代码装入内存。如果有多个程序使用相同的DLL,也只需将DLL在内存中装载一次,以节省内存的开销。 
2. DLL是基于Windows系统的程序模块,不仅包含可执行代码,还可包含数据与各种资源,扩大了库文件的使用范围。 
3. 对于一个大型的、不断更新的应用程序,可将许多重复的功能编写成DLL,用主程序调用,这样既能减少开发的工作量,又能提高访问速度。 
4. DLL丰富了PowerScript语言的编程能力,可以使用PowerScript函数集之外的函数。 
5. DLL独立于编程语言,大多数Windows编程环境都允许主程序调用DLL中的函数。可以用VC、PB、VB、汇编语言等建立DLL,然后在不同语言开发的应用程序中调用它。 
一个实例 
1. 用VC创建DLL  
在VC 6.0中可以用“MFC AppWizard”自动生成“Win32 DLL”和“MFC AppWizard DLL”。启动VC之后,从“File/New”菜单项,选择“New”对话框中的“Projects”标签,选择新项目为“MFC AppWizard(DLL)”,可输入工程名为dl-lwl,然后点击“OK”按钮,弹出选择DLL类型对话框后,再选择DLL类型为:Regular DLL using shared MFC DLL,最后点击“Finish”按钮。这样,AppWizard将自动创建一个包含基本要素的DLL框架,接着手工添加相关的代码。 
2. 打开dl-lwl.cpp文件,添加如下函数 
extern “C”_declspec(dllexport) 
int _stdcall output_number(int x) 
{ int y; 
char msg[20]; 
y=x >>2; 
sprintf(msg, “计算结果:%o ! ”, y); 
::MessageBox(NULL, msg, “信息”, MB_OK); 
return 0; 

以上声明了函数output_number(),输入参数为一个整型数,作移位运算后,用对话框将计算结果显示出来。 
接着打开dl-lwl.def文件,在EXPORTS下输入函数说明,文件内容如下: 
LIBRARY “pbdll” 
DESCRIPTION ‘pbdll Windows Dynamic Link Library’ 
EXPORTS 
; Explicit exports can go here 
out_num @1 
最后编译生成动态链接库dl-lwl.dll。 
3. 在PB中调用VC创建的DLL函数  
为了在PB应用程序中调用存放在动态链接库dl-lwl.dll中的函数output_number(),需要事先声明。在声明时必须明确: 
● 函数的作用范围,全局声明可使该函数用于整个应用,局部声明仅使该函数在对象的脚本中有效; 
● 必须指明函数返回的数据类型、传递参数的个数和类型,并将存放该函数的动态链接库的名字告诉PB。  
声明完成后,应用程序可以调用函数output_number(),调用该函数的代码与调用任何标准的PowerScript函数类似,区别就在于: 该函数存放在动态链接库中,调用时动态链接库装入内存,然后函数执行。对PB中被调用的函数使用声明:  
Function int output_number(int irow) LIBRARY “dl-lwl.dll” 
在PB中调用函数output_number()的代码如下: 
int irow,retcode 
irow=dw_1.rowcount() 
retcode=out_num(irow) 
装入动态链接库(DLL) 
当PB应用程序调用外部函数时,动态链接库装入内存。操作系统会在如下位置查找动态链接库:EXE文件运行的目录或Windows的系统目录。假如没找到所需的DLL,应用程序将产生运行错误并显示错误提示。如果找到DLL,它就被映射到程序的内存空间。  
小 结 
动态链接库(DLL)能为不同开发环境下的应用编程提供方便,可节省内存空间,提高运行速度,同时也丰富了PowerScript语言的编程能力。动态链接库的使用也拓展了PB的可编程空间、实现了PB本身所不能实现的功能,是对PB开发语言有效的补充。

posted @ 2012-11-07 16:54  郑文亮  阅读(3244)  评论(0编辑  收藏  举报