PBNI初步使用PowerBuilderNativeInterface(PowerBuilder本机接口PBNI)允许将第3方程序转换为PowerBuilder对象,供PowerBuilder直接使用,也允许将PowerBuilder虚拟机嵌入到C++应用中。对于每个版本的PowerBuilder都需要编译对应版本的PBNI程序。下面讲解如何使用VS2010开发PB10.5版本PBNI组件环境搭配及简单PBNI应用实例:1启动VS2010菜单中选择“文件”-“新建”-“项目”,建立一个VC++win32dll项目:在解决方案资源管理器中的“解决方案PBNI”上右击弹出菜单选择“添加”-新建项目…,在弹出的添加新项目窗口中输入名称PBNI(名称可随意取)。如下图:点击确定,VS切换到win32应用程序向导,单击下步,在应用程序设置中将应用程序类型选择“dll”点击完成。在VS2010中,解决方案资源管理器中如下:2设置PBNIHello的Include和Lib路径:在解决方案资源管理器的PBNI项目上右击,弹出右键菜单选择属性,在配置属性的常规页中设置如下:配置选择所有配置,平台为win32,平台工具集为V100,字符集为UNICODE。点击应用按钮。在C/C++的常规下的附加包含目录选择编译,弹出窗口中新增输入“D:\ProgramFiles\Sybase10\PowerBuilder10.5\SDK\PBNI\include”(根据实际安装情况填写)点击应用在链接器的常规页的附加库目录选择编辑,弹出的窗口中新增输入”D:\ProgramFiles\Sybase10\PowerBuilder10.5\SDK\PBNI\lib”(根据实际安装情况填写)在链接器的输入页的附加依赖项中选择编辑在弹出窗口中新增输入pbni.lib3代码编写打开头文件下的stdafx.h,在文件最后输入一行#includePBEXT.H建立一个头文件PBNIHello.h:在解决方案资源管理器的头文件上右击弹出菜单选择“添加”“新建项目”弹出窗口中选择vc++头文件,名称为PBNIHello.h按添加返回,并在PBNIHello.cpp中输入#includePBNIHello.h声明定义PBNIHello类:在头文件PBNIHello.h中声明PBNIHello类在PBNIHello.cpp中实现PBNIHello类的Invoke和HelloPBNI方法:在dllmain.cpp中实现导出PBX_GetDescription、PBX_CreateNonVisualObject函数,以便生成PowerBuilder对象导出PBX_GetDescription、PBX_CreateNonVisualObject函数代码代码的简要分析:PBNIHello.h中声明PBNIHello类,类为nonvisualobject对象类。在PBNIHello.cpp中实现PBNIHello类的Invoke和HelloPBNI方法,同时在HelloPBNI中定义了一个userName的string变量进行返回。PBX_GetDescription中声明创建不可视对象(nonvisulaobject)和函数of_hellopbni参数为PBNIHello.cpp中HelloPBNI中定义了一个userName变量。类名为n_pbnihelloPBX_CreateNonVisualObject中查找是否存在类名为n_pbnihello的类,如果没有,就进行创建。4代码编译编译后会按照设置的编译属性,放去Debug目录下5PB10进行引用和调用选择PBNIHello.dll导入成功后创建一个窗口,对对象进行调试分析窗口名字为w_testPB对应窗口的测试代码如下:应用打开测试窗口调试分析需要注意把PBNIHello.dll复制到PB对应的PBL目录将PBNIHello.dll生成为pbnihello.pbd删除应用,使用PBD进行调用(注意调用的时候,DLL文件仍然是需要在目录下)