我们怎样在.NET应用中重用PowerBuilder中的非可视用于对象(NVOs)呢?在PowerBuilder 9.0版本之前,我们可以通过PowerBuilder Automation技术或者采用三层的解决方案。
随之后来,我们可以将所有的NVOs托管在EAServer上面,从而作为中间组件层。
自PowerBuilder 9.0版本开始,PowerBuilder 提供了一个全新的与PowerBuilder虚拟机(PBVM)进行交互的接口-PowerBuilder Native Interface(PBNI).在这篇文章中,我将向大家介绍怎么在非托管的C++代码中使用PBNI,以及向C#托管代码封送参数,以便你可以通过C#调用PowerBuilder NVOs.
PBNI介绍(PowerBuilder Native Interface)
PBNI是在PowerBuilder 9.0版本中引入的一个新特性。且只在企业版本中可用,安装在%PowerBuilder安装目录%/SDK/PBNI中.你可以在inlcude目录下面找到你所需要的全部头文件。
PBNI是一个标准的编程接口,通过它开发人员可以扩展PowerBuilder的功能。你可以使用PBNI创建PowerBuilder的可视和非可视扩展(封送扩展),同时你也可以将PowerBuilder virtual machine(PBVM)内嵌到C++应用中.与PowerBuilder automation相比而言,PBNI具有一下优点:
· 它不仅只是重用已存在的NVOs. 可以使用PBNI扩展PowerBuilder,使其可以提供诸如XML parsing和Web service整合的功能.
· 不是基于COM技术的解决方案,因此不需要注册设置。也可以部署到非Windows平台上面.
· 多种语言都可以重用PowerBuilder组件.例如,基于Java的应用可以使用JNI,经由PBNI调用PowerBuilder组件。
· 大部分的PowerBuilder内建特性可以迁移到PowerBuilder扩展中,这样PowerBuilder的核心(PBVM)将会缩小.应用部署的大小会依据所需要使用的特性而变化。
怎么使用
PBNI提供预定义的C++接口,允许PBVM与其他语言进行交互(请看图1). Table 1列出了一些重要的接口
在非托管的代码中呼叫PowerBuilder NVO
使用PBNI调用PowerBuilder NVO,你需要按照下述步骤:
1. 标识所需要的PowerBuilder库文件以及在NVO中的方法签名字符串.可以通过PowerBuilder库面板来完成,在需要获取方法签名的NVO节点下面对应的方法上点击鼠标右键并选择<属性>,则显示在"Signature"文本框中的就是方法签名字符串(请看图2).