PBNI整理版本剖析Word文档格式.docx
- 文档编号:13473803
- 上传时间:2022-10-11
- 格式:DOCX
- 页数:13
- 大小:107.23KB
PBNI整理版本剖析Word文档格式.docx
《PBNI整理版本剖析Word文档格式.docx》由会员分享,可在线阅读,更多相关《PBNI整理版本剖析Word文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
现在只要透过PowerBuilder9的PBNI技术,就可以让PowerBuilder的程式呼叫Java,或是在一个C++的程式中引用PowerBuilderNVO物件函数。
以往的PowerBuilder程式只能够透过外在函数呼叫的方式来存取C/C++的函数,但在PowerBuilder9.0之中扩增了一项强而有力的介面-「PowerBuilderNativeInterface」,简称PBNI。
透过PBNI的开发方式,PowerBuilder开发人员不仅可以使用物件导向的方式来存取C/C++函数,而且还可反向地让C/C++程式呼叫PowerBuilder之中的物件,达到应用程式的整合。
更甚者,在藉由JNI与PBNI两者的结合,Java应用程式也可双向地与PowerBuilder程式沟通。
何谓PBNI
在谈什么是PBNI之前,我们先来谈谈下面三个问题:
1.开发人员有办法用PowerBuilder程式呼叫C或是C++的程式吗?
2.开发人员有办法用PowerBuilder程式呼叫一些外部元件像是JavaEJB元件、WebService元件、JavaClass程式等诸如此类的元件吗?
3.开发人员有办法用反过来,用C或是C++呼叫已经使用PowerBuilder开发好的程式吗?
上述三个问题,在过去的PowerBuilder其实都可以做到某种程度的地步,只是都有些问题。
传统上使用PowerBuilder开发上述的程式时,如果要呼叫C或是C++的程式,是可以使用宣告外部函数的方式来使用一个已经撰写好的DLL函数,
例如:
FUNCTIONulongGetSysColor(intindex)LIBRARY"
USER32.DLL”
FUNCTIONbooleansndPlaySoundA(stringSoundName,uintFlags)LIBRARY"
WINMM.DLL"
可是如果是下面的程式呢:
BOOLEnumWindows(WNDENUMPROClpEnumFunc,LPARAMlParam);
这个可是个大问题了,因为这个WindowsDLLFunction中会用到所谓的「Callback」函数的技术,所谓的CallbackFunction指的是今天有A和B两个物件,在程式中A物件呼叫B物件的Function,而在该B物件的Function又会回头呼叫A物件的其他Function,这就叫「Callback」。
在PowerBuilder呼叫C的Function后,在这个C的Function中要再回头呼叫PowerBuilder的函数是不可能用引用外部函数的方式来达到这个目地的。
除了CallbackFunction使用困难之外,使用外部函数也有资料型态的限制,以及没有办法使用物件导向的方式开发等种种的困难及问题。
再来谈谈PowerBuilder呼叫外部的元件的方法,在以前能够让PowerBuilder呼叫EJB元件,就只能透过一些协力厂商开发的「COMBridge」,让PowerBuilder程式透过COM元件来呼叫Java程式。
至于要让Java或是C++来呼叫PowerBuilder程式的话,过去最常见的方法就是把这个PowerBuilder的程式包装成为「OLEautomationserver」。
这些方法都不是一个真正解决的好方法,说穿了,这些方法跟本就没有办法直接和PowerBuilder的核心「PowerBuilderVisualMachine」做沟通,所以在过去的版本的PowerBuilder,是一直有这种和其他语言程式不能沟通的困扰,这也是大家一直认为,PowerBuilder是一个封闭不开放的开发工具。
PowerBuilder9这个版本有几个突破性的技术,而PBNI就是其中一个。
所谓的PBNI(PowerBuilderNativeInterface),指的是PowerBuilder提供一个「原生介面(NativeInterface)」,透过这个介面可以使得PowerBuilder提高了对其他程式语言的扩展能力,比方说透过该介面可以存取任何类型的外部应用应用程式,或是让外界其他的程式语言存取或是呼叫PowerBuilder开发的程式,下面是一个简单的
PBNI的示意图:
此主题相关图片如下:
1.jpg
在上面这张图中,PBNI提供了两道让外界可以和PowerBuilder核心(PBVM)的介面窗口,第一个对外的窗口是指在图的右半边,我们可以开发「PBExtension」,PBExtension其实最后会变成DLL,透过该技术,C或是C++的DLL程式可以包装成为一个「PBD」的档案,而该PBD的档案就可以在开发程式时,加到LibrarySearchPath中,让PowerBuilder直接存取PBD里的物件函数,你可以把它当作是一个很像PowerBuilderNVO的东西来对待它。
第二个对外的窗口是指在图的左半边,你可以把PowerBuilderVirtualMachine「内嵌」到一个C++的应用程式中,在C++程式中就可以直接呼叫PowerScriptFunction。
PBNI的元素
PBNI提供了一些基本的元素,透过这些元素,程式开发人员可以快速的引用外部程式语言,下面是常见到的PBNI元素:
?
PBNI提供的介面(Interface):
IPB_VM:
这个介面的作用,在于当你要用C++或是其他的程式语言来呼叫PowerBuilder开发的程式,或是你希望要和PowerBuilder的核心「PBVM」进行互动,或是沟通协调,你可以使用这个介面。
IPB_Session:
这是一个抽象的介面,这个介面可以用来定义诸如存取PowerScript里面的资料、建立PowerBuilder物件和呼叫PowerScript函数操作的方法
IPB_Value:
这个介面你可以把它想像成是它就是代表PowerBuilder的值。
这些值可以是PowerBuilder的标准资料型态,例如String、Long、Integer、Char等等。
所以这个介面提供了关于每个变数的资讯,包括变数的类型、标记、存取权限(Public、Private和Protected)、变数值或参数存取方式(例如CallbyValue或是Reference)。
IPB_Arguments:
这个介面可以让使用者在PowerBuilderVM和「PBExtension」间传递参数。
IPBX_NonVisualObject和IPBX_VisualObject:
这两介面很意思,因为它们可以在C++程式中实作出来,而且是放在PBExtension里面,你在PowerBuilder中就可以用PBD的方式看到你实作出来的物件,而要写这些可见或是不可见的物件,靠的就是IPBX_NonVisualObject和IPBX_VisualObject介面。
IPBX_Marshaler:
这个介面是当你要出一个「PBmarshalerextension」时,一定要实作出IPBX_Marshaler这个`介面。
这个介面尤其是你要由PowerBuilder呼叫Java程式时,一定要用到的一个介面。
PBNI提供的Structures:
PBCallInfo:
这个Structure可以在开发PBNI程式时,让PBNI和PowerBuilder之间呼叫的函数保持参数和回传值的资讯。
如果要存取在PBCallInfo中的资讯,可以使用IPB_Arguments介面来获得PBCallInfo。
PBArrayInfo:
PBArrayInfo是一个C++的structure,这个Structure可以在阵列中保持一些资讯。
PBNI提供的GlobleFunction:
如果你要写一个PowerBuilderextension的程式(说穿了就是用C++写一个DLL档啦),这个物件必须要汇出两个GlobalFunctions,让这个程式可以「内
嵌」PowerBuilderVM并且建立实体出来。
下面是PBNI提供的GlobleFunction:
PBX_GetDescription()
PBX_CreateNonVisualObject()
PBX_CreateVisualObject()
PBX_InvokeGlobalFunction()
PBNI提供的Helperclasses:
HelperClasses指的是一些辅助的类别物件,PBNI提供像是PBObjectCreator、PBArrayAccessor和PBEventTrigger等辅助类别,透过这些辅助类别物件可使PBNI在开发上更简单。
PBNI的开发方式
在了解PBNI有那些元素后,读着应该也了解到何谓PBNI,并且知道PBNI能帮我们做什么。
在针对不同的目地,PBNI也有不同的开发方式,常见的PBNI开发目地为下列四个,在后面的部份会祥细的说明PBNI的开发方式为何:
建立PBextensions
建立PBmarshalerextensions
建立PBvisualextensions
内嵌PBVM到C++的应用程式中
建立PBextensions步骤
之前有跟各位读者提过,PBNI提供了两个对外的方法,其中一种就是将C或是C++写好的DLL档案,透过PBNI提供的介面来包装成一个PowerBuilder认得的PBD档案,这种方式称之为建立「PBExtensions」。
在开发一个PBExtensions的程式时,我们必须先设想好,最后我们要产生的PBD中,会有那些物件。
比方说,我现在手头上正在写一个C++的程式,我希望这个C++的程式最后透过PBNI的帮助,产生一个PBD档案,而且在这个PBD里面有一个Funtion物件,而这个F
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PBNI 整理 版本 剖析