1,077
社区成员
发帖
与我相关
我的任务
分享
我再去掉你一些多余的代码
#include "stdafx.h"
#include "pbdllteset.h"
#include "pbext.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
typedef PBXEXPORT PBXRESULT (*P_PB_GetVM)(IPB_VM** vm);
LPCTSTR PASCAL pbdll( char* x )
{
PBCallInfo ci;//执行代码输入输出去结构
IPB_Session* session;//与PB会话接口
IPB_VM* pbvm = NULL;//虚似机接口
HINSTANCE hinst;
P_PB_GetVM getvm;//虚似机
pbgroup group;//组ID
pbclass cls;//类ID
pbmethodID mid ;//方法ID
//pbobject pbobj;//对象句柄
LPCTSTR ret;
pbstring lpbs;
hinst = LoadLibrary("pbvm105.dll");//载入虚似机
if ( hinst== NULL) return 0;
getvm = (P_PB_GetVM)GetProcAddress(hinst,"PB_GetVM");//得到返回虚似机的函数地址
if (getvm == NULL) return 0;
getvm(&pbvm);//得到虚似机
if (pbvm == NULL) return 0;
LPCTSTR LibList[] = {"pb91.pbl"};
if ( pbvm->CreateSession("pb91", LibList, 1, &session) != PBX_OK )//创建会话,选入的应用名为:pb91
{
return 0 ;
}
//PBSessionOwner sessionower(session);//建立会话管理类
group = session->FindGroup("n_c1",pbgroup_userobject);//得到用户对象的分组,当然于组ID(注:按理说,用户对象也是一个类,但PB习惯叫它为对象)
if (group == NULL) return 0;
cls = session->FindClass(group,"n_c1");//得到类ID
if (cls == NULL) return 0 ;
mid = session->GetMethodID(cls, "of_get", PBRT_FUNCTION, "SSL");//得到方法ID,方法结构为: function string of_get(string,long).检查这里是不是正确的。
//pbobj = session->NewObject(cls);//该类的对象实例.实事上如果只是要调用,可以直接使用cls
session->InitCallInfo(cls, mid, &ci);//初使化输入输出结构
ci.pArgs-> GetAt(0)->SetPBString(session->NewString(x));//设定第一个入参. ci.pArgs-> GetAt(0)->SetLong(0);//设定第二个入参
//session->InvokeObjectFunction(pbobj, mid, &ci);
session->InvokeClassFunction(cls,mid, &ci);//也可以这样调用,这样就不需要pbobj了。
lpbs = ci.returnValue->GetString();//得返回值pbstring
ret = session->GetString(lpbs);//转成LPCTSTR
return ret;
}
看到我上面跟你说的,你知道你的代码问题出在哪里了吗?下面我跟你修改一下:
#include "stdafx.h"
#include "pbdllteset.h"
#include "pbext.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
typedef PBXEXPORT PBXRESULT (*P_PB_GetVM)(IPB_VM** vm);
LPCTSTR PASCAL pbdll( char* x )
{
PBCallInfo ci;//执行代码输入输出去结构
IPB_Session* session;//与PB会话接口
IPB_VM* pbvm = NULL;//虚似机接口
HINSTANCE hinst;
P_PB_GetVM getvm;//虚似机
pbgroup group;//组ID
pbclass cls;//类ID
pbmethodID mid ;//方法ID
//pbobject pbobj;//对象句柄
LPCTSTR ret;
pbstring lpbs;
hinst = LoadLibrary("pbvm105.dll");//载入虚似机
if ( hinst== NULL) return 0;
getvm = (P_PB_GetVM)GetProcAddress(hinst,"PB_GetVM");//得到返回虚似机的函数地址
if (getvm == NULL) return 0;
getvm(&pbvm);//得到虚似机
if (pbvm == NULL) return 0;
LPCTSTR LibList[] = {"pb91.pbl"};
if ( pbvm->CreateSession("pb91", LibList, 1, &session) != PBX_OK )//创建应用,应用名为:pb91
{
return 0 ;
}
PBSessionOwner sessionower(session);//建立会话类
group = session->FindGroup("n_c1",pbgroup_userobject);//得到用户对象的分组,当然于组ID(注:按理说,用户对象也是一个类,但PB习惯叫它为对象)
if (group == NULL) return 0;
cls = session->FindClass(group,"n_c1");//得到类ID
if (cls == NULL) return 0 ;
mid = session->GetMethodID(cls, "of_get", PBRT_FUNCTION, "SSL");//得到方法ID,方法结构为: function string of_get(string s).检查这里是不是正确的。
//pbobj = session->NewObject(cls);//该类的对象实例.实事上如果只是要调用,可以直接使用cls
session->InitCallInfo(cls, mid, &ci);//初使化输入输出结构
ci.pArgs-> GetAt(0)->SetPBString(session->NewString(x));//设定第一个入参.这里只有一个入参,所以设一个就行了.
ci.pArgs-> GetAt(0)->SetLong(0);
//session->InvokeObjectFunction(pbobj, mid, &ci);
session->InvokeClassFunction(cls,mid, &ci);也可以这样调用,这样就不需要pbobj了。
lpbs = ci.returnValue->GetString()//得返回值pbstring
ret = session->GetString(lpbs);//转成LPCTSTR
return ret;
}
#include "stdafx.h"
#include "pbdllteset.h"
#include "pbext.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
typedef PBXEXPORT PBXRESULT (*P_PB_GetVM)(IPB_VM** vm);
LPCTSTR PASCAL pbdll( char* x )
{
PBCallInfo ci;//执行代码输入输出去结构
IPB_Session* session;//与PB会话接口
IPB_VM* pbvm = NULL;//虚似机接口
HINSTANCE hinst;
P_PB_GetVM getvm;//虚似机
pbgroup group;//组ID
pbclass cls;//类ID
pbmethodID mid ;//方法ID
pbobject pbobj;//对象句柄
LPCTSTR ret;
pbstring lpbs;
hinst = LoadLibrary("pbvm105.dll");//载入虚似机
if ( hinst== NULL) return 0;
getvm = (P_PB_GetVM)GetProcAddress(hinst,"PB_GetVM");//得到返回虚似机的函数地址
if (getvm == NULL) return 0;
getvm(&pbvm);//得到虚似机
if (pbvm == NULL) return 0;
LPCTSTR LibList[] = {"pb91.pbl"};
if ( pbvm->CreateSession("pb91", LibList, 1, &session) != PBX_OK )//创建应用,应用名为:pb91
{
return 0 ;
}
PBSessionOwner sessionower(session);//建立会话类
group = session->FindGroup("n_c1",pbgroup_userobject);//得到用户对象的分组,当然于组ID(注:按理说,用户对象也是一个类,但PB习惯叫它为对象)
if (group == NULL) return 0;
cls = session->FindClass(group,"n_c1");//得到类ID
if (cls == NULL) return 0 ;
mid = session->GetMethodID(cls, "of_get", PBRT_FUNCTION, "SS");//得到方法ID,方法结构为: function string of_get(string s).检查这里是不是正确的。
pbobj = session->NewObject(cls);//该类的对象实例.实事上如果只是要调用,可以直接使用cls
session->InitCallInfo(cls, mid, &ci);//初使化输入输出结构
ci.pArgs-> GetAt(0)->SetPBString(session->NewString(x));//设定第一个入参.这里只有一个入参,所以设一个就行了.
session->InvokeObjectFunction(pbobj, mid, &ci);
//session->InvokeClassFunction(cls,mid, &ci);也可以这样调用,这样就不需要pbobj了。
lpbs = ci.returnValue->GetString()//得返回值pbstring
ret = session->GetString(lpbs);//转成LPCTSTR
return ret;
}