VS2013搭建PB12.5 PBNI环境及基础应用实例

5星 · 超过95%的资源 需积分: 44 16 下载量 100 浏览量 更新于2024-09-09 收藏 843KB PDF 举报
PBNI(PowerBuilder Native Interface)是Sybase PowerBuilder的一个关键组件,它允许开发者将第三方程序或功能转化为PowerBuilder可以直接使用的对象,从而增强了PowerBuilder的应用范围,支持跨平台集成。在PowerBuilder 12.5版本中,利用Visual Studio 2013作为开发工具,可以创建PBNI组件环境,并实现PowerBuilder与C++应用的交互。 首先,为了配置PB12.5版本的PBNI开发环境,你需要在系统属性中设置PBNI相关的环境变量。具体步骤如下: 1. 打开系统属性,进入环境变量设置,新建一个名为“PBNISDK125”(或其他自定义名称)的系统变量,值为PowerBuilder 12.5 SDK的PBNI路径,例如"C:\Program Files(x86)\Sybase\PowerBuilder12.5\SDK\PBNI",确保根据你的实际安装路径进行修改。 2. 在准备好环境变量后,打开Visual Studio 2013,创建一个新的空白解决方案。接下来,你需要创建一个VC++ Win32 DLL项目,以便编写PBNI相关的C++代码。在解决方案资源管理器中,通过右键选择“添加”->“新建项目”,输入项目名称,比如“PBNIHello”。 3. 在项目向导中,将应用程序类型设置为“dll”,完成项目创建。然后,在头文件PBNIHello.h中,声明并定义PBNIHello类,继承自IPBX_NonVisualObject,包含了私有成员变量(如IPB_Session指针和pbobject实例)以及公开的方法,如of_hellopbni函数,该函数接收参数并返回结果。 4. 实现of_hellopbni函数的关键在于调用PowerBuilder的接口。例如,你可能这样处理字符串参数:“ls_rtn=pbni_obj.of_hellopbni("wxj")”,这里的ls_rtn是返回值,"wxj"是传递给函数的参数。注意,这一步需要确保PowerBuilder对象的正确初始化和调用。 5. 最后,编译和链接PBNI项目,确保PowerBuilder能够识别和加载这个DLL,通过PowerBuilder对象接口来调用C++代码中的PBNIHello类及其方法。这通常涉及到PowerBuilder中的对象绑定(Object Binding)过程,使得PowerBuilder能够理解并操作C++代码中的PBNI对象。 PBNI环境搭建涉及设置环境变量、创建C++项目、声明和实现PBNI类,以及在PowerBuilder中调用这些类的方法。通过这样的方式,你可以有效地将第三方程序集成到PowerBuilder项目中,提高开发效率和应用灵活性。
2009-05-10 上传
PB9以上的PB版本适用。 使用只有三个函数,很简单。 这是用PBNI编写的控件,VC6的IDE,VC2003的编译器编译,UNICODE版本。 三个函数的使用说明: of_addtip(unsignedlong winhandle, string tip) 添加一个tip。这是必须首先调用的函数,即:在使用其他两个函数前,必须先调用此函数。 winhandle:窗口句柄,操作tip的窗口的句柄,tip的图标即用此窗口的图标。 tip: tip的字符内容。 of_modifytip(string title, string info) 修改tip的内容,并且动态将修改的内容立即显示。参数的含义明显。 of_deletetip() 删除tip. 对tip图标上的鼠标操作的处理: 原理是:图标上的所有windows消息,都会转发到参数winhandle所代表的窗口,作为该窗口的WM_USER消息,即触发该窗口的pbm_custom01事件。pbm_custom01事件的lparm参数指定tip图标的windows消息号。 具体作法:在参数winhandle所代表的窗口的pbm_custom01事件中写代码,检测lparm的值,以判断鼠标进行了哪种操作,如:lparm为517(WM_RBUTTONUP),表示鼠标弹起。 pbm_custom01中的示例代码: //start CONSTANT long WM_MOUSEMOVE = 512 CONSTANT long WM_LBUTTONDOWN = 513 CONSTANT long WM_LBUTTONUP = 514 CONSTANT long WM_LBUTTONDBLCLK = 515 CONSTANT long WM_RBUTTONDOWN = 516 CONSTANT long WM_RBUTTONUP = 517 CONSTANT long WM_RBUTTONDBLCLK = 518 CONSTANT long WM_USER = 1024 CONSTANT long NIN_BALLOONSHOW =(WM_USER + 2) CONSTANT long NIN_BALLOONHIDE =(WM_USER + 3) CONSTANT long NIN_BALLOONTIMEOUT =(WM_USER + 4) CONSTANT long NIN_BALLOONUSERCLICK =(WM_USER + 5) m_base lm_menu CHOOSE CASE lparam CASE WM_MOUSEMOVE // CASE WM_LBUTTONDOWN //鼠标左键按下 CASE WM_LBUTTONUP //鼠标左键弹起 CASE WM_LBUTTONDBLCLK //鼠标左键双击 CASE WM_RBUTTONDOWN // SetFocus ( this ) lm_menu = CREATE m_base lm_menu.PopMenu(PointerX(),PointerY()) DESTROY lm_menu CASE WM_RBUTTONUP // CASE WM_RBUTTONDBLCLK // CASE NIN_BALLOONSHOW // CASE NIN_BALLOONHIDE // CASE NIN_BALLOONTIMEOUT // CASE NIN_BALLOONUSERCLICK // CASE ELSE Beep(0) END CHOOSE //end 注意事项: 经测试,本PBNI如果与其他非UNICODE版的PBNI同用时,会显示乱码。无解。 如有BUG,敬请及时告知。 本控件的讨论贴: http://topic.csdn.net/u/20090510/20/14a57e09-02ca-44df-8f9b-e3811678360d.html
2021-10-18 上传
服务端(jsxserver),采用c++ + iocp + pbni + zlib编写而成,支持PB长连结(提供pb客户端demo),支持http get post调用,pbni调用pbcall里的nvo_pbnicall(服务端业务代码全由PB编写),具体请看demo客户端代码中的说明; 实现的功能:1.pb客户端调用功能,可实现类似easerver iiop的功能,比easerver多了服务端心跳,客户端自动判断是否断网,自动重连,客户端单开线程序通迅,前端界面不会卡死(用eserver不管是iiop还是ws高锋期经常未响应卡半天),传输码流比easerver小,程序总体运行效率也高一些,支持http get post调用,做接口很容易实现;2.客房端点对点发消息(由服务端转发),可以实现类似在线聊天的功能,响应http post也可以通过服务端即时转发给PB的客户端,PB客户端生成响应数据返回http调用端,客户如果用的局域网系统,又想做移动端的远程查询(小数据量),软件供应商有公网服务器的话,可用本框架打通实现,我们用此框架实现过医生手机远程连入门诊内部查询修改自已的预约、患者资料;3.服务端即时通知功能,pb长连结客户端、http调用,服务端处理完成后,可以给在线的pb长连结客户端发通知消息,客户端收到通知后可即时做出相应操作,例如:酒店系统,前台开房后,全系统房态即时刷新,门诊系统患者前台挂号后,医生端即时就看的到,等等,比客户端轮询来的效果好。