首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

PowerBuilder PBNI 環境搭建全攻略:VS2013 開發 PB12.5 原生擴展組件

     編輯:C++ 入門

從零構建 PBNI 開發環境:讓 C++ 功能無縫融入 PowerBuilder

PowerBuilder Native Interface (PBNI) 是 PowerBuilder 與原生 C++ 代碼互操作的橋樑。它允許將第三方 C++ 庫封裝為 PowerBuilder 物件直接調用,也支持將 PB 虛擬機嵌入 C++ 應用。關鍵限制:每個 PB 版本都必須編譯對應版本的 PBNI 組件,不可混用。

一、開發環境準備清單

  • PowerBuilder 12.5 (目標運行版本)
  • Visual Studio 2013 (C++ 編譯工具鏈)
  • PBNI SDK 頭文件與庫文件(隨 PB 安裝目錄提供,通常在 pbni.h、pbshr125.dll 等)

二、VS2013 專案配置要點

  1. 創建 Win32 DLL 專案,命名如 PBNI_Hello。
  2. 屬性頁 → C/C++ → 一般 → 附加包含目錄:加入 PB 安裝目錄下的 include 路徑(含 pbni.h)。
  3. 屬性頁 → 連結器 → 一般 → 附加庫目錄:加入 PB lib 目錄。
  4. 屬性頁 → 連結器 → 輸入 → 附加相依性:添加 pbshr125.lib(對應 PB12.5)。
  5. 預處理器定義加入 PBNI_VERSION=500(PB12.5 對應版本號)。
  6. 配置屬性 → 進階 → 目標機器:MachineX86(PB 12.5 為 32 位)。

三、最小化 PBNI 組件實戰:of_hellopbni

目標:實現一個 PBNI 物件方法,接收字串參數並原樣返回。

1. 定義 PB 端介面

// PowerBuilder 端定義
nonvisualobject nvo_pbni_test
    function string of_hellopbni(string as_input);
end nonvisualobject

2. C++ 實現核心邏輯

#include "pbni.h"
#include 

// 實現 PBNI 類別
class PBNI_Hello : public IPBX_NonVisualObject {
public:
    // PBNI 必須實現的虛函數
    virtual PBXRESULT Invoke(PBX_Session* session, pbobject obj, pbmethodID mid, PBCallInfo* ci) {
        // 解析參數:ci->pArgs[0] 為輸入字串
        pbarray args = ci->pArgs;
        pbvalue* pVal = args->GetAt(0);
        std::string input = pVal->GetString(); // 簡化處理,實際需用 PBX_GetString

        // 設置返回值
        ci->returnValue->SetString(input.c_str());
        return PBX_OK;
    }
    
    virtual PBXRESULT Destroy(PBX_Session* session, pbobject obj) {
        delete this;
        return PBX_OK;
    }
};

// 導出函數:PB 虛擬機載入 DLL 時調用
PBX_EXPORT PBXRESULT PBX_CreateNonVisualObject(PBX_Session* session, pbclassID cid, pbobject* obj) {
    *obj = new PBNI_Hello();
    return PBX_OK;
}

3. PowerBuilder 端調用代碼

// PB 代碼
PBNI_Hello pbni_obj
pbni_obj = CREATE PBNI_Hello
string ls_rtn
ls_rtn = pbni_obj.of_hellopbni("wxj") // 返回 "wxj"
DESTROY pbni_obj

四、常見坑與調試技巧

  • 版本不匹配:編譯出的 DLL 必須與目標 PB 版本完全一致,否則載入失敗或崩潰。
  • 字串編碼:PBNI 使用 Unicode (UTF-16),C++ 端需用 wchar_t/std::wstring 或 PBNI 提供的字串轉換 API。
  • 調試方法:VS 專案屬性 → 偵錯 → 命令參數設置為 pb125.exe 路徑,命令參數傳入測試用的 .pbt 專案,即可斷點調試 C++ 代碼。
  • 部署:將編譯產出的 DLL 放入 PB 應用同目錄或系統 PATH 目錄下。

五、延伸資源

掌握 PBNI,即可讓 PowerBuilder 突破語言邊界,直接調用高性能 C++ 算法、硬體驅動或第三方 SDK,極大拓展應用能力邊界。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved