PowerBuilder Native Interface(PowerBuilder本机接口PBNI)允许将第3方程序转换为PowerBuilder对象,供PowerBuilder直接使用,也允许将PowerBuilder虚拟机嵌入到C++应用中。对于每个版本的PowerBuilder都需要编译对应版本的PBNI程序。

  下面讲解如何使用VS2013开发PB12.5版本PBNI组件环境搭配及简单PBNI应用实例:

  实现一个PBNI对象的函数of_hellopbni将参数传递进来,然后pbni函数返回,

  

//PowerBuilder代码
string ls_rtn
ls_rtn = pbni_obj.of_hellopbni("wxj")

  将wxj这个字符串原封不动的从of_hellopbni函数返回。

  1.   先不要启动VS2013,在系统属性中设置PB12.5PBNI环境变量,系统属性->环境变量->新建(W)….,在编辑系统变量窗口中输入变量名称“PBNISDK125”(此名称可按自己爱好取),变量值为PB125.2PBNI安装目录,这里为“C:\Program Files (x86)\Sybase\PowerBuilder12.5\SDK\PBNI”(根据实际安装情况填写)
    一、PBNI环境搭建及初步使用
  2. 启动VS2013,菜单中选择“文件”->“新建”->“项目”,建立空白解决方案,如下图:
    一、PBNI环境搭建及初步使用
    单击确定。
  3. 建立一个VC++win32 dll项目:在解决方案资源管理器中的“解决方案PBNI”上右击弹出菜单选择“添加”->新建项目,在弹出的添加新项目窗口中输入名称PBNIHello(名称可随意取)。
    一、PBNI环境搭建及初步使用
    点击确定,VS切换到win32应用程序向导,单击下步,在应用程序设置中将应用程序类型选择“dll
    一、PBNI环境搭建及初步使用
    点击完成。VS2013中,解决方案资源管理器中如下:
    一、PBNI环境搭建及初步使用
  4. 设置PBNIIncludeLib路径:

    在解决方案资源管理器的PBNIHello项目上右击,弹出右键菜单选择属性,在配置属性的常规页中设置如下:配置选择所有配置,平台为win32,平台工具集为VS2013Visual studio2013 – windowsXP,字符集为UNICODE(若编译PB9PBNI选择为使用多字节字符集)
    一、PBNI环境搭建及初步使用
    点击应用按钮。

    C/C++的常规下的附加包含目录选择编译,弹出窗口中新增输入$(PBNISDK125)\include
    一、PBNI环境搭建及初步使用
    点击确定返回到PBNIHello属性页。
    一、PBNI环境搭建及初步使用
    点击应用按钮。

    在链接器的常规页的附加库目录选择编辑,弹出的窗口中新增输入$(PBNISDK125)\lib
    一、PBNI环境搭建及初步使用
    点击确定返回到PBNIHello属性页。一、PBNI环境搭建及初步使用点击应用按钮。

    在链接器的输入页的附加依赖项中选择编辑,在弹出窗口中新增输入pbni.lib一、PBNI环境搭建及初步使用点击确定返回到PBNIHello属性页,并在该属性页上点击确定。

  5. 打开头文件下的stdafx.h,在文件最后输入一行#include <PBEXT.H>
    一、PBNI环境搭建及初步使用
  6. 建立一个头文件PBNIHello.h:在解决方案资源管理器的头文件上右击弹出菜单选择“添加”“新建项目”弹出窗口中选择vc++头文件,名称为PBNIHello.h
    一、PBNI环境搭建及初步使用按添加返回,并在PBNIHello.cpp中输入#include "PBNIHello.h"
    一、PBNI环境搭建及初步使用
  7. 声明定义PBNIHello类:在头文件PBNIHello.h中声明PBNIHello类
     1 #pragma once
     2 
     3 class PBNIHello :
     4     public IPBX_NonVisualObject
     5 {
     6 private:
     7     IPB_Session * m_pSession;
     8     pbobject m_pbobject;
     9 public:
    10     PBNIHello(IPB_Session * pSession, pbobject obj)
    11         :m_pSession(pSession),
    12         m_pbobject(obj)
    13     {
    14     };
    15     ~PBNIHello(void){};
    16     PBXRESULT Invoke(IPB_Session * session, pbobject obj, pbmethodID mid, PBCallInfo * ci);
    17     void Destroy()
    18     {
    19         delete this;
    20     }
    21     enum Function_Entrys
    22     {
    23         mid_HelloPBNI=0,
    24         NO_MORE_METHODS
    25     };
    26 protected:
    27     PBXRESULT HelloPBNI(PBCallInfo* ci);
    28 };
    View Code

相关文章:

  • 2021-06-26
  • 2021-09-10
  • 2021-12-14
  • 2021-09-04
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-01-19
  • 2021-10-01
  • 2021-11-27
  • 2022-02-14
  • 2021-08-26
  • 2022-12-23
相关资源
相似解决方案