您现在的位置: 中国IT实验室 >> 数据库技术 >> 数据库技术 >> 文章正文
数据库技巧之PB与外界的交互方式

ChinaITLab收集整理  2005-8-12  保存本文  推荐给好友  QQ上看本站  收藏本站



  一.PB与外界的交互方式
  
  一般来说,如果系统是一个纯粹的C/S模式的MIS应用系统,则与外部程序的交互比较少,PB本身提供的功能就足够实现所有的功能;但有的时候,当对系统的界面,性能要求比较严,或是在系统中还有很多其它的功能时,比如说办公自动化系统,此时需要比较多的与外界(或是外部程序)通迅,比如要发送EMAIL等等。
  
  就PowerBuilder来说,它是一个开放式的开发平台,提供了多种手段来扩展它的功能,归纳起来,主要有: WIN API调用
  
  DDE(动态数据交换)
  
  OLE(动态数据链接)
  
  OCX(自定义控件)
  
  二.WIN API调用
  
  在一个系统中,有的功能用PB是实现不了或是不好实现的,比如对数据的压缩,而在WIN API中却有相应的函数调用或是我们用其它语言实现起来比较方便,此时我们就要用到API的调用。
  
  在讲解之前,我们来看一下DDL文件的结构。在DDL中,所有的函数可分为输出和非输出两大类,输出的函数可以在外部调用,而非输出的函数则只能在DDL内部调用(WIN95中也可调用)。一般的,一个DDL包括以下几个部份:
  
  名为LibEntry的汇编语言模块
  
  名为LibMain()的非输出启动模块
  
  Exported Programmer-Defined DLL函数(输出函数)
  
  可选的Nonexported Programmer-Defined DLL函数(非输出函数)
  
  当系统装载或卸载DDL时,都要运行一次LibMain()和WEP()函数。LibMain()执行初始化工作,而WEP()执行所要求的清理工作。
  
  DDL创建的方法有很多种,当然您可直接用WIN API函数和汇编语言编写,但一般不这样,象在Visual C++中就提供了建立DLL的功能,还有很多其它方法,在这就不一一说明了。
  
  在创建了DLL后,怎样才能在PB中访问其中的函数呢?您需要做以下几步工作:
  
  将DLL文件拷贝到自已的DOS路径下或是Windows的路径下
  
  在调用以前声明您所要调用的函数:FUNCTION <函数说明> Library
  
  在需要的时候调用
  
  在PB中,对外部函数的声明有两种情况,语法如下:
  
  语法一:有返回值的函数
  
  { access } FUNCTION returndatatype name ( { { REF } datatype1 arg1, ..., { REF } datatypen argn } ) LIBRARY "libname" ALIAS FOR "extname"
  
  语法二:无返回值的函数
  
  { access } SUBROUTINE name ( { { REF } datatype1 arg1, ..., { REF } datatypen argn} ) LIBRARY "libname" ALIAS FOR "extname"
  
  参数的传递:
  
  通过值传递的语法: ParameterDataType Parameter
  
  通过引用传递的语法: REF ParameterDataType Parameter
  
  实例:
  
  取得用户名:
  
  FUNCTION BOOLEAN GetUserNameA(REF STRING uName,REF ULONG sLength) &
  
  LIBRARY "advapi32.DLL"
  
  STRING UserName,sLength
  
  sLength = 255
  
  UserName = SPACE(255) //分配空间
  
  GetUserNameA(UserName,sLength)
  
  动态触发键盘的键值(本例为TAB):
  
  #DEFINE TABKeyCode 7
  
  SUBROUTINE Keybd_Event(INT bVk,INT bScan,INT dwFlags,INT dwExtraInfo) &
  
  LIBRARY "user32.dll"
  
  Keybd_Event(TABKeyCode,0,0,0) //按下TAB
  
  Keybd_Event(TABKeyCode,0,2,0) //放开TAB
  
  三.DDE(动态数据交换)
  
  DDE其实质是一种Windows应用程序之间的交换数据的机制,它是通过其享内存来实现的。通常它通过以下方式来实现:
  
  1.DDE客户应用程序与DDE服务器应用程序建立会话
  
  2.DDE客户应用程序向DDE服务器应用程序提出请求
  
  3.DDE服务器应用程序向DDE客户应用程序提供数据和服务
  
  它的工作方式有三种:
  
  1.冷连接:只有当客户应用程序请求时,服务器应用程序才发送数据
  
  2.温连接:建立了会话后,如果服务器应用程序的数据更新了,将发送一个消息给客户应用程序
  
  3.热连接:如果服务器应用程序的数据更新了,将自动将数据发送给客户应用程序
  
  PowerBuilder中的对应事件:
  
  HotLinkAlarm: 在DDE服务器应用发送了数据时,应用程序接收到后触发
  
  RemoteExec: 当一个DDE客户发送了一条命令时触发
  
  RemoteHotLinkStart: 当DDE客户开始一个热连接时触发
  
  RemoteHotLinkStop: 当DDE客户结束一个热连接时触发
  
  RemoteRequest:: 当DDE客户请求数据时触发
  
  RemoteSend: 当DDE客户已发送了数据时触发
  
  PowerBuilder中的函数:
  
  CloseChannel: 关闭由OpenChannel打开的与DDE服务器应用的通道
  
  ExecRemote: 请求DDE服务器运行指令
  
  GetDataDDE: 从热连接的DDE服务器应用中得到数据并放到定义好的串中
  
  GetDataDDEOrigin: 从已建立的热连接中确定数据来源
  
  GetRemote: 向服务器请求数据
  
  OpenChannel: 打开一个通道
  
  RespondRemote: 通知DDE服务器应用,所收到的数据是否可接收
  
  SetRemote: 请求DDE服务器应用设置一些特定项
  
  StartHotLink: 与DDE服务器应用建立热连接
  
  StopHotLink: 结束与DDE服务器应用的热连接
  
  GetCommandDDE: 得到由DDE客户发送的指令
  
  GetCommandDDEOrigin: 得到DDE客户指令的源
  
  StartDataDDE: 发送特定数据到DDE客户应用程序
  
  StartServerDDE: 开始启动服务器应用
  
  StopServerDDE: 停止服务器应用
  
  实现步骤如下:
  
  1.建立连接
  
  2.发送请求或是处理请求
  
  3.发送数据或是接收数据
  
  4.结束连接
  
  四.OLE和OCX(对象连接与嵌入)
  
  OLE与OCX的应用主要是源于将多个应用信息源组合到一起的目标,在PowerBuilder的实际应用中,OCX的应用比较多,因为它能更好的与PowerBuilder的应用程序相结合,从而实现PowerBuilder不好实现或是很难实现的功能。实际上,PowerBuilder本身以及Visual Basic等等其它程序提供了很多处现特定功能的OCX控件。通过它们,我们可以非常容易的实现一些PowerBuilder本身不能实现的功能。
  
  在PowerBuilder中,如果要调用OCX控件的话,首先得将OCX控件在系统中注册才能使用。在PowerBuilder中使用OCX控件非常的容易,只需要将OCS控件加入到程序中,然后直接调用其功能即可。其功能请参考各OCX控件的相关资料。




 相关文章  热门文章
WEB2.0到底是什么东东?三点来理解它!
数据库技巧之Dephi的DLL技巧汇集
学一个比较完美的spacer div技巧
eXtremeDB内存式实时数据库的简介
PB程序之间是怎样传递字符串变量?
为什么Access会报错:显示密码无效?
Power Builder中数据窗口技巧十则
浅议C语言中数组和指针的相互操作
疑难解答之ACCESS的数据极限
PB中可以动态创建浏览器的OLE对象

 文章评论


认证培训
热门专题       more
相关下载
论坛新帖
博 客