在PB中实现多平台统一的API调用.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
在PB中实现多平台统一的API调用

在PB中实现多平台统一的API调用 (深圳:独孤求败?2003-05-27) ----?一.问题的提出:? ----?我们知道,PB是一个支持多平台的软件开发工具。它主要用于C/S应用程序的客户端软件开发。PB支持用户在不同的平台上创建应用程序。而PB的API(Aplication?Program?Interface)调用是指PB能够利用其所挂的操作平台所提供的函数来完成某些功能。由于PB能应用在不同的平台上,因此随平台环境的不同。PB的API调用形式也因此不同。这就涉及到如何在PB的应用程序中开发出独立于操作系统的统一的API调用以保证不管实际的API函数调用是什么,都能为应用程序编写出一致的界面。? ----?二.解决问题的方法:? ----?用PB提供的非可视化定制类用户对象,使用继承,封装和重载的手段就能解决上述问题。具体地说,就是在应用程序中建立一个祖先类用户对象(基类),该祖先对象是一个非可视化定制类用户对象,在祖先类用户对象中封装能为每个环境定义的全部函数(这些函数是原型化的用户对象函数而不是外部声明的函数)。在祖先类用户对象中封装的函数不完成任何工作(即不完成任何功能,定义为虚函数)。具体的函数(即实际的对不同的操作系统的API调用)附加于祖先类用户对象的后代类用户对象中。即在后代类用户对象中重载祖先类用户对象中的所有函数,在后代类用户对象中进行API调用的实际外部函数声明和调用。每一个后代类用户对象对应于一个操作系统。在应用程序对象的open事件的script中,用PB提供的GetEnvirnment()函数查询应用程序的环境以判断当前应用程序运行于哪一种操作系统中,将用祖先类用户对象声明的实例变量实例化为对应的操作系统所相应的后代类用户对象的实例。以便在运行时根据实例变量所具体实例化的类型来决定调用哪一个后代类用户对象中相应的函数(类的多态性)。? ----?三.举例说明:? ----?下面以一个简单的例子说明如何在PB中实现多平台统一的API调用。? ----?在本例中,需要实现这样一个功能:在打开应用程序的窗口时,能让它居于屏幕的中心。这个功能由全局外部函数fun_centerwindow()完成。该函数的原型声明为:? fun_centerwindow(window?w_active)returns?(None) ----?在该函数中,我们要调用microsoft提供的函数GetSystemMetrics()来访问当前屏幕的宽度和高度,并利用以象素为单位的转换因子进行修改,再转换为PB单位。GetSystemMetrics()函数是windows操作系统提供的函数,在PB中调用这个函数时,要进行函数的外部声明。该函数的外部声明因操作系统的不同而不同。例如,在windows3.x和windows95中,该函数的外部声明分别为:? //win31 FUNCTION?Int?GetSystemMetrics(Int?index)? LIBRARY?USER.EXE //win32 FUNCTION?Int?GetSystemMetrics (Int?index)?LIBRARY?USER32.DLL ----?下面,我们就以windows3.1和windows95这两个操作系统为例来实现对GetSystemMetrics()函数的统一调用界面。? ----?首先,定义祖先类用户对象uo_apictrl。打开?user?object画板,选中New,定义祖先类用户对象uo_apictrl,为uo_apictrl定义user?object?function:? uf_getsysmetrics(integer?a_nindex)returns?integer ----?其具体代码为:?return?1? ----?其次,定义对应于windows3.1操作系统的后代类用户对象uo_apictrl_winapi。打开?user?object画板,选中Inherit...,在Inherit?From?User?Object对话框中选中刚才定义的祖先类用户对象uo_apictrl,在打开的user?object画板下定义uo_apictrl_winapi,为uo_apictrl_winapi声明局部外部函数:? PRIVATE?FUNCTION?Int?GetSystemMetrics (Int?index)?LIBRARY?USER.EXE ----?为uo_apictrl_winapi重载uo_apictrl中的函数uf_getsysmetrics(integer?a_nindex)returns?integer。该重载函数的代码为:? return?GetSystemMetrics(a_nindex)

文档评论(0)

qwd513620855 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档