如何使用方法 ID 从 Powerbuilder 调用 PBNI 方法
How do I call PBNI methods from Powerbuilder, using method ID
我正在创建一个 c++ PBNI non-visual 扩展,像这样从 powerbuilder 调用它:
textbox1.text = string (cpp_add.f_add(integer(textbox2.text), integer(textbox3.text)))
PBX_GetDescription()
有一个 class 和两个这样描述的函数:
"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"
Header:
#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 中右击库并选择 'Import PB Extension'?这样做会创建一个您在 PB 脚本中使用的 'shell' 对象,它会自动调用传递方法 ID 的 Invoke 方法。
显然问题出在这里:
enum MethodIDs
{
mAdd = 1,
mAdd2 = 2
};
ID从0开始计算正确:
enum MethodIDs
{
mAdd = 0,
mAdd2 = 1
};
我正在创建一个 c++ PBNI non-visual 扩展,像这样从 powerbuilder 调用它:
textbox1.text = string (cpp_add.f_add(integer(textbox2.text), integer(textbox3.text)))
PBX_GetDescription()
有一个 class 和两个这样描述的函数:
"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"
Header:
#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 中右击库并选择 'Import PB Extension'?这样做会创建一个您在 PB 脚本中使用的 'shell' 对象,它会自动调用传递方法 ID 的 Invoke 方法。
显然问题出在这里:
enum MethodIDs
{
mAdd = 1,
mAdd2 = 2
};
ID从0开始计算正确:
enum MethodIDs
{
mAdd = 0,
mAdd2 = 1
};