c++ - 如何使用方法 ID 从 Powerbuilder 调用 PBNI 方法

标签 c++ powerbuilder

我正在创建一个 c++ PBNI 非可视化扩展,像这样从 powerbuilder 调用它:

 textbox1.text = string (cpp_add.f_add(integer(textbox2.text), integer(textbox3.text)))

PBX_GetDescription() 有一个类和两个函数是这样描述的:

"class pbadd from nonvisualobject \n" \
"function int f_add(int a, int b)\n" \
"function int f_add2(int a, int b)\n" \
"end class \n"

标题:

#include "pbext.h"
class pbadd : public IPBX_NonVisualObject
{
public:
    pbadd();
    virtual ~pbadd();
    PBXRESULT Invoke(
        IPB_Session   *session,
        pbobject      obj,
        pbmethodID    mid,
        PBCallInfo    *ci);

    int f_add(IPB_Session*, pbint, pbint);
    int f_add2(IPB_Session*, pbint, pbint);
    enum MethodIDs
    {
        mAdd = 1,
        mAdd2 = 2

    };

private:
    virtual void Destroy();
};

以及所需的调用方法:

PBXRESULT pbadd::Invoke(IPB_Session *Session,
    pbobject obj, pbmethodID mid, PBCallInfo *ci)
{   
    if (mid == mAdd)
    {
        int sum = f_add(Session, ci->pArgs->GetAt(0)->
            GetInt(), ci->pArgs->GetAt(1)->GetInt());
        ci->returnValue->SetInt(sum);
    }
    if (mid == mAdd2)
    {
        int sum = f_add2(Session, ci->pArgs->GetAt(0)->
            GetInt(), ci->pArgs->GetAt(1)->GetInt());
        ci->returnValue->SetInt(sum+1);
    }
    return PBX_OK;
}

现在的问题是:我不知道如何调用这两个方法中的第二个。我假设我可以以某种方式更改 pbmethod mid,但我不知道如何从 powerbuilder 这样做。

最佳答案

您是否在 PowerBuilder 中右键单击库并选择“导入 PB 扩展”?这样做会创建一个您在 PB 脚本中使用的“shell”对象,它会自动调用传递方法 ID 的 Invoke 方法。

关于c++ - 如何使用方法 ID 从 Powerbuilder 调用 PBNI 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58917507/

相关文章:

c++ - 声明一个继承final的类

.net - 寻找一个简单的.Net、3D绘图API(装配)

c# - ActiveX 事件与 COM 事件不同?

c++ win32 列表框和 slider 创建 windows 应用程序

c++ - 为复杂数据结构重载 [] C++ 运算符

c++ - QT QGraphicsScene 绘制圆弧

c++ - 尝试在 C++ Visual Studio 2010 中声明枚举时出现奇怪错误

webcam - Powerbuilder网络摄像头

.net - 如何识别第三方应用程序使用的控件?