一.概述

一般来说,如果系统是一个纯粹的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 <DDL文件名>
  • 在需要的时候调用

在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控件的相关资料。

PowerBuilder与外界的交互方式相关推荐

  1. 借助Aspose.Cells组件,实现PowerBuilder Datawindow 数据导出到Excel

    一.思路 笔者曾使用C#开发过一定的应用,对Aspose.Cells组件印象深刻. Powerbuilder是早期的开发工具,尽管年代久远,但因为开发快速,单位应用也不涉及互联网,加上Powerbui ...

  2. X Window、GNOME和KDE之间的关系

    X Window.GNOME和KDE之间的关系 分类: Linux2011-04-25 23:06 3570人阅读 评论(1) 收藏 举报 桌面环境文件管理器unix图形linuxqt 目录(?)[+ ...

  3. gnome桌面环境 kde桌面环境的区别

    过去的GNOME 2.low.x与KDE 3.x 当时,两大桌面环境除了共同使用freedesktop制定的desktop文件的标准以外,每种东西都有自己的实现办法.抛开底层的开发库GTK +和QT不 ...

  4. Gnome Ubuntu和KDE Ubuntu的区别

    Ubuntu 8.04里头默认安装的是gnome桌面.但是也可以换成KDE桌面,但什么是Gnome Ubuntu和KDE Ubuntu呢?以下是自己查阅的资料: KDE与GNOME是很类似的:它们在本 ...

  5. 区块链编程_区块链编程的10个最佳工具包

    区块链编程 区块链世界中的许多精力和兴奋都集中在加密货币,其暴涨的估值以及令人震惊的崩溃上. 大多数企业界都静静地待在场上,弹出一些玉米,然后定居下来欣赏表演. 但是,随着公司开始将脚趾伸向动荡的水域 ...

  6. ubuntu之安装(Gnome和KDE)

    这几日,突然想试试linux!想想linux的版本,的确是多如牛毛!听说每五秒钟世界上就会产生一个linux系统.现在在中国比较流行的有fedra core .Red Hat Enterprise L ...

  7. ROS:使用usb_cam软件包调试usb摄像头

    0x00 usb_cam软件包简介 为了丰富机器人与外界的交互方式,我们已经增加了与机器人的语音交互方式,不仅使机器人能够说话发声,还能听懂我们说的话,但是如果只有语音交互的话机器人就是一个盲人,无法 ...

  8. VUI+GUI,AI时代全新的立体交互方式

    语音的交互,将会给我们的产品设计带来极大的改变,一种视觉.听觉更为立体的方式,应该是提升产品效率,提升用户体验的一种进步和挑战.未来的产品方向,或者说是人机交互的方式,极可能是语音与屏幕的立体交互,我 ...

  9. Powerbuilder历程

    Powerbuilder历程 0引言 PowerBuilder是在中国用户群很大的数据库产品,多年来深受中国用户的喜爱.作为一个使用PowerBuilder多年进行系统开发的资深用户,我在进行开发的同 ...

最新文章

  1. ls:显示指定目录的详细信息
  2. 无线网卡服务端工具airserv-ng
  3. go mysql 乱码_MySQL 乱码之我见
  4. 【控制】频域分析及奈氏判据
  5. Math,random()返回区间内的随机数
  6. 一次从节点同步出错的解决
  7. 阿里云centos7使用yum安装mysql的正确姿势
  8. 大道至简 第二章 读后随笔
  9. 那些开源程序中让人叹为观止的代码 - 1 浏览器特性判断
  10. angular4学习记录 -- 依赖注入
  11. GoLang笔记—容器篇
  12. pc游戏手柄测试软件,《原神》PC版技术性开发测试,游戏手柄操作更佳爽快
  13. 北京玉渊潭公园第二十届樱花节
  14. CSS3 按钮 打钩
  15. 高薪程序员面试题精讲系列82之说一下SQL查询语句的执行顺序详解-原理篇(下)
  16. npm报错 npm ERR! Could not resolve dependency:npm ERR! peer pug@“^2.0.0“ from pug-loader@2.4.0
  17. Java使用@Value获取不到值
  18. 《弟子规》全集译文,为孩子的明天存下来!
  19. c语言模拟计算机指令流程图,家居分布式温度监测报警系统-传感器课程设计报告 带程序及仿真全套资料...
  20. python题库--简单

热门文章

  1. Word页面显示大小怎么修改
  2. maven install时报错 dependencies.dependency.version' for cn.e3mall:e3-manager-pojo:jar is missing.
  3. 爱普生Epson WF-6093 打印机驱动
  4. 【Halcon视觉】扫码
  5. c++判断字符串是否为回文
  6. USB SATA PCIE带宽的换算公式
  7. hexo文章插入音乐和视频
  8. 全球及中国铸铝炊具行业营销状况及竞争动态分析报告(新版)2022-2027
  9. VulnHub—HA-Avengers Arsenal
  10. Arduino简单实例之六_超声测距离传感器