PowerBuilder文摘
首页 | 原创 | 译文 | 转载 | 源码 | 工具 | 灌水 | 全部 | PB助手 | 相册 | 留言 | 登陆 | 注册
公告

今天你PB了吗?
今天你摘了吗?
欢迎来到PB文摘:)

我的网摘

统计信息
日志: 54
评论: 821
到访: 800436 [统计]
今日: 85
用户: 202 [列表]
在线: 3
日历
2021 - 05
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
最新日志
最新评论
搜索
归档
友情链接
杂项
Get RSS Feed (Version 1.0)
Get RSS Feed (Version 2.0)
Get Atom Feed (Version 0.3)
编码:  UTF-8
Creative Commons
Powered by Bo-Blog V1.6.1114
谷歌=Google?
2006年4月14日10:06星期五  [灌水]

这名字译的,本地化不是起个中文名就搞定的,我觉得Google就挺好,不就一个符号吗?咱中国人见多了,即便是为了让老百姓都知道你,那也得起个好点的,现在流行炒作,怎么着也得全民支招再海选一把,结果应该会比这个好点。

阅读全文
Posted by tigerchamp | 评论(4) | 阅读1509次
Sybase发力?
2006年4月5日09:34星期三  [原创]

从去年年底到现在,经常能在CSDN上看到关于Sybase的消息,最近又将首次在大陆举办开发者日,看来PowerBuilder想借着.NET的平台,趁Borland转型的机会再度雄起,让我们拭目以待。

John Strano
Sybase Technology Evangelist
多年的世界巡回演讲经验

 

王晓昀
PowerDesigner 发明人、首席架构师

 
神秘演讲嘉宾



阅读全文
Posted by tigerchamp | 评论(2) | 阅读1858次
PB应用程序编译发布技术研究
2006年3月31日01:11星期五  [转载]

摘要:本文主要讨论基于Windows平台的PowerBuilder 8.0应用程序编译发布关键问题和解决方法,包括执行文件的建立、资源文件的创建、安装程序的建立及添加数据源和SQL anywhere 数据库移动处理等问题。关键字:软件开发、PowerBuilder 8.0、应用程序发布、Setup程序制作 。

       引言

  PowerBuilder+ODBC+SQL anywhere是目前开发数据库应用程序非常流行的模式。但PowerBuilder本身仅是一个开发工具,当一个应用程序被开发并完成调试后,我们还需对其建立可执行文件并移植到终端用户的机器上,其中ODBC的配置和SQL anywhere的安装是难点,本文论述基于Windows平台的PowerBuilder 8.0应用程序编译发布关键技术问题和解决办法。

  执行文件的建立

  1、编译格式的选择

  PowerBuilder 8.0对生成可执行文件提供了两种编译格式:伪代码(Pcode,即pseudocode的缩写)和机器代码(Machinecode)。伪代码是一种在所有PowerBuilder 平台上支持的解释性语言,它的格式与PowerBuilder 运行库(.pbl)一样,在可执行状态下保存单个对象,其优点是方便和可移植;机器代码则是真正的完全脱离PowerBuilder 环境的可执行文件,其优点是速度快,但文件容量比较大。选择编译代码格式一般基于以下三个方面:

  ①速度。若目标是优化运行速度和应用强化脚本处理,则选择机器代码。要是代码中较多地使用了循环结构、浮点运算或整数算法及函数调用,机器代码将比伪代码做得更好。但伪代码的编译速度比机器代码快,特别是开发人员要快速地创建测试用的可执行文件时非常便利;

  ②大小。伪代码生成的文件比机器代码的小。如运行应用程序的终端机器容量紧张的话,就需要放弃较快的机器代码而选择伪代码;

  ③移植。伪代码对于跨平台的应用非常有用。它可以方便地跨平台(PowerBuilder 支持)使用,包括:Microsoft Windows (16位和32位)、AppleMacintosh和UNIX。机器代码是依赖于平台的,也就是说要求生成和可执行应用平台一致,不过它可以获得更好的性能。

  2、动态库的建立

  发布PowerBuilder 8.0应用可以将一些对象不放到可执行文件中,而放到动态库中在运行时装入,这样可以将应用程序分割成更小的模块便于管理和维护。

  选择伪代码(Pcode)编译方式生成PowerBuilder动态库(.pbd文件),选择机器代码(Machinecode)方式在Windows和UNIX平台上生成动态链接库(.dll文件,如将test.pbl编译成test.dll),在machine平台上生成平台支持的共享库(如test.lib)。如果在Windows上有两个应用,那么编译成的.pbd包含一个调用全局外部函数的用户对象,为了保证正确调用函数必须为每个应用单独编译和发布.pbd文件。

  当建立动态库时,将源库(.pbl文件)中所有对象的编译版本拷贝到动态库中。为了在某些库中只使用所需的对象,可以将它们放到一个标准的PowerBuilder库(.pbl)中。

  在建立动态库时,PowerBuilder并不检查所有对象,只是简单地去掉对象的源格式,因此,对于一些在画笔或脚本中指定了使用资源(图形、图标或指针)的对象,若不想提供单独的资源,则必须在资源文件(.pbr)中罗列出这些资源,这样才能保证在建立动态库时包含这些资源。

  动态库的建立有两种途径:一是在库管理画笔中建立;二是在工程画笔中建立工程对象时一起建立。

  3、资源文件的使用

  可执行文件或动态库中可以包含一些资源(图形、图标或指针),也可以将它们作为单独的资源文件(.pbr文件)保存。

  (1)单独的分布资源

  若某资源不包含在可执行文件或动态库中,则在执行应用程序引用它时,PowerBuilder按查询路径查找该资源,因此,必须将它与应用程序一起放在查询路径下。

  Windows的查询路径为:当前目录,Windows目录,Windows的System目录和PATH环境变量中设置的所有目录。

  (2)资源文件

  可以使用PowerBuilder资源文件(.pbr)替代单独的资源,其中列出所有的动态分配的资源也可以包含动态分配的数据窗口对象。PowerBuilder将这些资源编译后放入可执行文件或.pbd文件中,这些资源在执行时可直接使用。

  若给数据窗口控件动态分配数据窗口对象,则必须创建一个资源文件,且在可执行文件或动态库文件中包含该对象,或在一个单独的动态库中包含它。

  资源文件(.pbr)是一个ASCII码文件,在其中列出了应用程序要有到的各种资源(如.bmp、.cur、.ico、.rle和.wmf文件)和数据窗口对象。使用文本编辑器(如Windows的记事本)创建一个文本文件,其中列出在应用中动态引用的资源文件,一行列出一个资源,格式如:

appico.ico
appbmp1.bmp
appbmp2.bmp
……

  以上文件和对象都假设是在当前目录中,如果存在于另一个目录中,则必须包含所在路径,格式如:

e:\myapp\test.jpg。

  在.pbr文件中指定的文件名必须与在脚本中引用的资源匹配,若引用时包含路径,则在.pbr文件中也必须包含同一路径,否则因PowerBuilder在执行时只是简单地进行字符串比较...

阅读全文

Posted by tigerchamp | 评论(1) | 阅读1816次
PB10.5 & PB11CTP
2006年3月28日04:52星期二  [原创]

Powerbuilder10.5发布,同时还有11的technology preview,有兴趣的可以看看。

PB10.5
http://www.sybase.com/products/developmentintegration/powerbuilder

PB11 CTP
http://www.sybase.com/pb11ctp



阅读全文
Posted by tigerchamp | 评论(2) | 阅读1792次
PowerBuilder中数据窗口的数据缓冲区
2006年3月22日04:39星期三  [转载]

摘 要 powerbuilder中数据窗口的数据缓冲区应用广泛,本文简述了pb中数据缓冲区的原理、状态

  关键词 数据窗口; 数据缓冲

  DATAWINDOW的四个缓冲区

  在PowerBuilder中,DataWindow是用户前端用来存储、操纵数据的对象。在每一个DataWindow对象中有4个二维表作为数据缓冲区,用来存储查询到的数据。用户在DataWindow中对数据处理系统内部的操作实际上都是将数据在这几个缓冲区中进行的修改和移动,最后在用户提交数据库时,系统根据这四个缓冲区中的信息形成SQL的IN-SERT,UPDATE,DELETE等语句。这四个缓冲区是:

  1、Primary Buffer

  这个缓冲区是存放填充窗口中DataWindow控件中数据的,调用DataWindow的Retrieve()函数和InsertRow()函数可以将数据填入这个缓冲区中。当使用有关DataWindow删除和过滤函数时,相应记录将从这一缓冲区中删除。而在执行DataWindow的Update()函数时,PowerBuilder将查看这一缓冲区中的记录,以形成SQL INSERT和UPDATE语句。

  2、Delete Buffer

  这个缓冲区保存的是用DeleteRow()函数从Primary Buffer中删除的记录,执行Update()函数时,系统根据这一缓冲区的记录形成DELETE语句。

  3、Filter Buffer

  这个缓冲区存储的是从Original Buffer使用Filter()函数过滤到Primary Buffer中后剩余的记录。

  4、Original Buffer

  这一缓冲区存储的是DataWindow最初执行retrieve()函数时得到的全部记录。当提交数据库时,根据Primary Buffer生成的UPDATE语句和根据Delete Buffer生成的DELETE语句都要依据这一缓冲区来构造这些SQL语句中的Where子句。

  Original Buffer由PowerBuilder内部维护,Power-Builder所提供的任何函数都无法改变它的值,不过通过PowerBuilder所提供的GetItem…系列的函数可以读出DataWindow最初从数据库中查到的原始值。通过这些函数我们可以编程实现所谓的"Undo"功能,并且得到在使用乐观锁时形成提交数据库的WHERE子句。

  如果您当前使用的DataWindow没有设置修改的权力,您将不能对Delete缓冲区和Original缓冲进行操作,而且当调用Update()时也将引起系统错误。

  数据缓冲区的状态值

  Primary Buffer和Delete Buffer都有行级和列级的状态值,这个状态值是一个枚举类型。在提交时由该行的状态值来决定是否要产生SQL语句,其中Primary Buffer产生的是IN-SERT和UPDATE语句,而Delete Buffer产生的是DELETE语句。我们用GetItemStatus()函数和SetItemStatus()函数可以对这一状态值作操纵。这一枚举状态有以下四种:

  ·NotModified!———该行或行的值为查询所得,没有发生改变。

  ·DataModified!———该行或列的值为查询所得,发生了改变。

  ·New!———该行或列为一插入的新行,数据没有发生改变(数据为空或缺省值)。

  ·NewModified!———该行或列为一插入的新行,数据发生改变。改变是通过用户键盘输入或调用了SetItem()函数。

摘自 http://dev.yesky.com/410/2220410.shtml



阅读全文
Posted by tigerchamp | 评论(10) | 阅读1486次
PowerBuilder程序中的并发控制
2006年3月22日04:36星期三  [转载]

  摘 要 powerbuilder提供了强大的数据库接口,在并发控制上相对于其他编程工具有些独到之处,本文分析了pb中并发控制的原理以及基本使用

  关键词 并发控制;触发器

  并发能力是指多用户在同一时间对相同数据同时访问的能力。一般的关系型数据库都具有并发控制的能力,但是这种并发功能也会对数据的一致性带来危险。试想若有两个用户都试图访问某个银行用户的记录并同时要求修改该用户的存款余额时,情况将会怎样呢?我们可以对PowerBuilder中的DataWindow进行设置来进行并发控制。所谓并发控制就是指在用户数据修改的过程中保证该数据不被覆盖或改变的方式,在下面的例子中我们将看到如何设置DataWindow来控制开发访问。

  公司的某员工在银行前台取款2,000元,银行出纳查询用户的存款信息显示银行存款余额20,000元;正在这时,另一银行帐户转帐支票支付该帐户5,000元,机器查询也得到当前用户存款20,000元,这时银行的出纳员看到用户存款超过了取款额,就支付了客户2,000元并将用户存款改为18,000元,然后银行的另一名操作员根据支票,将汇入的5,000元加上,把用户的余额改为25,000元,那么数据库管理系统是否可以接受这些修改呢?

  在DataWindows的设计中,我们选择菜单RowsUpdate…,会出现Specify Update Characteristics的设置窗口,在这个窗口中我们设置Update语句中Where子句的生成,以此来进行开发控制。在这里有三个选项,我们分别看一看在本例中这三个选项的结果:

  (1)Key Columns:生成的Where子句中只比较表中的主键列的值与最初查询时是否相同来确定要修改的记录。在上述的例子中,转帐支票的操作将覆盖出纳员做出的修改,这样银行损失两千元。

  (2)Key and Updateable Columns:生成的Where子句比较表中主键列和可修改列的值与最初查询时是否相同。在上例中两次查询出的结果都是有两万余额,当第一个人修改余额时,余额仍是二万元,所以修改成立,而支票转帐操作时余额已不是二万,所以该列不匹配,修改失败。

  (3)Key and Modified Columns:Where子句比较主键和将要修改的列,在本例中,结果与Key and Updateable Columns的选择相同,因为余额已改变,不再与最初的查询相同,因此仍然不能修改。

  让我们作另外一个假设,我们把银行后台作支票转帐操作改为冻结用户存款,即把状态字段的值改为冻结,而且事件发生的次序如下面例子所述,前台出纳的修改能不能成立呢:

  (1).Key Columns:Where子句只比较主键值,显然出纳员的修改是允许的。

  (2).Key and Updateable Columns:生成的Where子句包括比较所有可修改的列,因此出纳修改时Statue字段为冻结与出纳查询时的tive不符,修改失败,同时显示错误信息。

  (3).Key and Modified Columns:Where子句的比较包括主键和要修改的列,由于本列中修改列仍为20,000元没有变化,所以出纳的修改可以成立。

  在本例中,我们可以看到Key and Updateable Columns的选项最严格,可以避免出现状态列发生改变时余额作修改的错误,但是这也会禁止我们作一些本当允许的并发修改,如出纳修改存款余额,而业务员修改用户的联系地址等。因此我们应当根据实际情况,选择适当的Update设置。

  根据我们使用数据库的不同,我们还有一些其他的控制并发访问和修改的选择方案,如对数据加锁。锁是一个用户避免其他用户对指定行作修改的操作。在结束一个事务如执行commit,rollback,disconnect等语句时自动将锁释放。如果您使用的DBMS支持锁的操作,在Power-Builder的DataWindow设计时,Select语句可在from子句中加上with holdlock:即在data Window的SQL Window中,在表窗口的标题处点击右鼠标,弹出菜单的最后一个选项即为Holdlock。选择该项,生成的SQL语句将在retrievel()函数执行后将所查询的数据加锁,以避免其他用户的修改访问,直至commit,rollback等事件发生后解锁。这种方式带来的问题是,当用户查询完数据后可能离开计算机长时间不用,这段时间内其他用户均无法修改数据。此外有些DBMS如Sybase等不支持行级锁,也就是说当你对某一行查询时更多的行都被上了锁,这就更增加了并发处理的局限性。另一个值得注意的问题是在多窗口应用中某一个窗口的事务提交将会导致使用一事务中其他数据窗口的查询行解锁,这时修改将可能发生错误。

  某些DBMS系统支持一个称作"时间戳(timestamp)"的数据项来控制并发性。每张表中都有一个时间戳的数据列,当Insert语句或Update语句对数据行作修改时该列自动被修改为当前时间。当你要作修改时,where子句可检查时间戳列在查询时和修改时两个值是否相符,以此来确保您做出的修改不会覆盖别人的修改,因此这种确认方式与key and Updateable Columns选项相同。即使两个用户对同一行的不同列作修改,后一个修改者也将失败。在常用的关系型数据库中Sybase和Microsoft的SQL Server支持时间戳的使用。而在PowerBuilder中,不管用户后台连接何种数据库,只要表中带有timestamp的列名且数据类型为datetime,PB将自动忽略Update characteristics的选项,而在where子句中生成主键和时间戳列的比较。

  如果您所用的数据库不支持时间戳但支持触发器,您也可以在表中增加一列整数型的列。当有对表中某种记录作修改时,该列自动加1。下列使用的是Watcom数据库,对Shipper表增加Updcnt字段并作两个触发器,这样任何用户或进程试图修改某行记录时,该字段均可发生变化。
对INSERT触发器的编写如下:

DROP TRIGGER INS—SHIPPER’
CREATE TRIGGER SHIPPER BEFORE INSERT ON SHIPPER
REFERENCING NEW AS Newvalue
FOR EACH ROW
BEGIN
SET newvalue.UpdCnt=newvalue.UpdCnt+1;
E...

阅读全文
Posted by tigerchamp | 评论(10) | 阅读1479次
DataWindow表格线自动调整
2006年3月14日09:38星期二  [转载]

    虽然PowerBuilder有Grid风格的DataWindow,但不够灵活,如果想打印一张边框粗线条或双线,内框为细线条的表格直接使用Grid风格的DataWindow就不能实现。因此许多人都用Tabular风格的DataWindow,然后自己用Line来实现Grid。 在调整线条位置是一个即伤脑筋又伤眼睛的事件,而一旦需要调整行高,所有工作都得重来,试一试用下面方法,会大大减轻你的工作量: 
    在vertical lines,改变它的属性,在Expressions Tab上,y1行上输入0,y2行上输入rowheight() - 1
    在horizontal lines, 设置 y1 和 y2 = rowheight() - 5 
    这样PowerBuilder会自动调整线的坐标,你只需要设置横线的长度和x1,x2的坐标即可。 马上Preview一下,看一看效果! 你再也不需要因为行的高度发生改变而重新调整线条位置。 

摘自http://www.cqeec.com/soft/jszl/jszl_list.asp?cp=&id=45



阅读全文
Posted by tigerchamp | 评论(6) | 阅读2284次
PowerBuilder历史
2006年3月10日09:46星期五  [译文]

最近看到一篇国外的文章,觉得很有意思,所以花了些时间翻译了一下,贴在这里,也好让大家了解一下PB昔日的辉煌 :-)

PowerBuilder历史--一个澳裔加拿大人眼中的传奇
作者: Chris Pollach
原文:http://pbdj.sys-con.com/read/124571.htm   
译者:PB助手

Sybase从什么时候开始开发PowerBuilder这个工具?PB又是如何演变成今天的模样?我曾经多次被不同的客户和学生问起这样的问题,而且一些IT界人士也对此表现出浓厚的兴趣,因此我不得不经常重复这个故事,并答复许多关于这方面的email。所以我决定将这篇东西正式地发布在PBDJ(注:pbdj.sys-con.com)上,以便使更多的后来人能了解PB的故事。下面所说的完全是我个人的一些观点及经历,某些事件发生的时间或地点可能会有些偏差(在我这样的年纪,记性是越来越差了)。OK,让我们从头开始吧。

第一幕 孕育
在那遥远的群星中……,早在Sybase之前……,PowerBuilder的产品原型被一家位于波士顿(美国马萨诸塞州)的名为Cullinet的数据库公司开发出来。Cullinet也是IDMS关系型数据库和ADS-Online应用开发系统的拥有者。IDMS数据库最开始是BF Goodrich开发的,这是一家位于加拿大安大略省伦敦市的轮胎公司,然后卖给了Cullinane(也就是后来的Cullinet)。Cullinet同时还有一种名叫”Golden Gate“的基于PC的开发工具,它可以被用来开发连接大型数据库主机的Client/Server图形化界面(GUI)应用程序,它原本是DOS下的开发环境,后来才被移植到MS Windows。1984年的时候,Cullinet认识到对基于PC的数据库及开发工具的需求即将兴起,他们考虑是否能参考ADS-Oline这个运行在327X机上并获得巨大成功的快速开发工具(RAD)开发出另一个基于PC的GUI开发工具。ADS-Oline的主要特性包括:快速开发,集成设计、编码、编译及调试,交互式原型生成等。它同时也拥有集中的数据字典,以及对不同的CASE工具的接口,可以直接从开发环境生成产品交付使用。

1984年,Cullinet开始了它的PC版的ADSO的原型工作,那时我是Cullinet加拿大的技术支持经理。这个项目组的头叫作Dave Litwack,他负责ADSO产品及IDMS-DC(一种类似于远程处理及客户信息控制系统的产品)。由于在Cullinet的多年经验,Dave对快速开发工具及通讯有着深刻的理解。这个开发中的新产品将拥有与ADSO一样的关键特性(值得一提的是,早在1985年的PB原型中,ORCA已经基本可以工作,这正是因为ADSO/IDMS拥有这项功能),同时还将新增一项重要功能:”一个强大的数据感知对象“。当时Cullinet正在试验一个叫作LRF(逻辑记录能力)及数据库存储过程的特性,这个新的对象将可以封装数据处理过程,使之从应用中剥离,而且它应该位于客户端,不依赖于任何服务端的数据库实现。

在这个原型的最初阶段,Dave选择了一名真正的C语言高手,名叫Kim Sheffield,同时他又从渥太华(安大略)招募了John Griffin--我的一个朋友,John是一名出色的大型机汇编程序员,那时他正准备转型到C语言。Dave让他编写了Menu画板(painter)。后来,John和另一名Cullinet的程序员Julie结了婚,Julie帮他一起重写了Menu画板以及在PB里加入对EAServer组件的远程调试功能。

Dave想要打造一个完全面向对象的全新工具,当时,C++正强力推出,但SmallTalk才是面向对象编程的真正主流。Dave希望PowerBuilder采用SmallTalk的面向对象思想,但同时要更易于被那些商业程序的开发者所使用。

在1985年的时候,这个工具的基本原型在Cullinet公司内部展示,它的潜力很快被高管层所明了,这些人中包括Bobby Orr--曲棍球传奇

阅读全文

Posted by tigerchamp | 评论(17) | 阅读4681次
PB10.5即将发布
2006年3月7日05:36星期二  [原创]

10.5将于3.15日发布,包含以下新特性,详见http://pbdj.sys-con.com/read/191058.htm

PowerBuilder Controls:


· DatePicker control
· DropDownCalendar property for EditMask controls
· DateSelected event for the MonthCalendar control
· Rich Text enhancements

Language Enhancements:

. Importing PowerBuilder extensions
· 30 digit Decimal datatype support
· Byte datatype support

DataWindow Enhancements:

· TreeView DataWindow presentation style
· Decimal support in DataWindow expressions
· New behavior for drop-down DataWindows in Web DataWindows
· New XMLGen.Paging property for Web DataWindows
· Drop-down calendar DataWindow option
· New ResetInk, SaveInk, and SaveInkPic DataWindow methods
· New dbAlias DataWindow object property
· Autosize height property on all DataWindow bands
· New property to suppress group headers on page breaks
· New property to hide blue outline in Print Preview
· RichText DataWindow presentation style changes

User Interface Enhancements:

 · New icons
 · Menu and toolbar enhancements
 · Windows XP enhancements


Database Connectivity Enhancements:

· Database tracing enhancements
· ADO.NET support for Sybase Adaptive Server Enterprise and Oracle
· Adaptive Server Enterprise 15 support
· Support for Sybase Adaptive Server temporary tables
· NCharBind database parameter for Oracle

Web Services Enhancements:

  .NET Web Service Engine



阅读全文
Posted by tigerchamp | 评论(4) | 阅读2669次
用PB5设计串口通讯程序
2006年2月22日01:21星期三  [转载]

石家庄铁道学院计算中心 王学军
---- PowerBuilder5.0是一种面向对象的、具有可视图形界面的、快速的交互式开发工具,它通过不同数据库采用各自的专用接口或通过ODBC接口,同时支持多种关系数据库系统、支持多文档界面(MDI)、对象嵌入与链接(OLE)、动态数据交换(DDE)。利用其独特的数据窗口对象,无须编写SQL语句,便可直接对数据库进行查询、修改、插入、删除、浏览、打印,以多种文件格式打开和存储数据,因此深受广大用户的欢迎。在实际应用过程中经常遇到PowerBuilder与其它设备通过串口进行通讯的程序设计如IC卡应用系统中需通过串口与IC卡读写器进行通讯;在控制系统中,需通过串口与下位机进行通讯。下面介绍PowerBuilder5.0中常用的两种串口通讯设计方法。

一、 调用Windows SDK函数进行串口通讯

---- 1、Windows SDK函数介绍

OpenComm
int OpenComm(LpszDevControl,
CbInQueue,cbOutQueue)
LPCSTR lpszdevcontro
l 设备控制信息的地址
UINT CbInQueue 
接受队列的大小(以字节为单位)
UINT  cbOutQueue
发送队列的大小
返回:如调用成功,返回值标示此打开的设备否则其返回值小于0
·CloseComm
Int CloseComm(idComDev)
Int idComDey 要关闭的设备
返回值:调用成功返回0,否则返回负值
·WriteComm
int  WriteComm(idComDev,lpvBuf,cbWrite)
int idComDev 通讯设备标示符
const void FAR * lpvBuf 数据缓存区地址
int ,cbWrite 要写的长度
返回值:如果成功返回所写的字节数,否则返回值小于0
·ReadComm
Int ReadComm(idComDev,lpvBuf,cbRead)
int idComDev 通讯设备标示符
const void FAR * lpvBuf 数据缓存区地址
int cbRead 要读的字节数
返回值:如果成功返回所读的字节数,否则返回值小于0
·FlushComm
Int FluseComm(idComDev,fnQueue)
Int idComDev 通讯设备标示符
Int fnQueue 要刷新的队列
返回值:成功时返回0,否则返回为负



---- 2、示例:



---- 图一(略)为一人事管理系统中的查询窗口。如果想与被查询人拨打电话,可输入该人姓名,在输入过程中,数据窗口会显示满足要求的所有人姓名,双击该行即将该人电话号码显示于单行编辑窗内,然后按“拨号”按钮即可。



---- 程序设计如下:



----
在窗口设计菜单中选取:Declare菜单?Declare External Function 输入:



 Function int OpenComm(String Comm,
Uint Inqueue,Uint Outqueue)Library
“USER.EXE”
Function int CloseComm(int lpt)Library
“USER.EXE”
Function int WriteComm(int lpt,String
buf,int Size) Library “USER.EXE”
Function int FlushComm(int lpt,
int no_que)...

阅读全文
Posted by tigerchamp | 评论(8) | 阅读1633次