我正在创建一个 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/