Visual Studio 开发 C++ DLL动态链接库,以及在PB中调用

目录

 

一.DLL概述:   动态链接库(Dynamic-Link   Library),简称DLL,是基于Windows系统平台下程序设计的一个非常重要的组成部分。使用DLL有许多优点:

二. Visual Studio中创建的C++ DLL----   在Microsoft Visual Studio  中可以安装C++开发环境,可以生成C++ DLL,启动VS之后,从文件  |  新建 菜单项,选择C++,选择动态链接库(DLL)下一步,这样,VS将自动创建一个包含基本要素的DLL框架,接着手工添加代码。  

三.在PowerBuilder中调用VS创建的C++ DLL函数  ----   为了在PowerBuilder应用程序中调用存放在动态链接库pbdll.dll中的函数out_num(),需要事先声明。在声明时要明确:

四.加载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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值