当前位置: 代码迷 >> PB >> C++中怎么正确引用Powerbuider中的结构体
  详细解决方案

C++中怎么正确引用Powerbuider中的结构体

热度:29   发布时间:2016-04-29 06:50:25.0
C++中如何正确引用Powerbuider中的结构体
C++中如何正确引用Powerbuider中的结构体

最近在学习Powerbuider,想有PBNI接口写一个函数。
这个API函数是GetSystemTime,参数中要使用一个SYSTEMTIME结构体。

我的PB函数定义是

function int GetSystemTime(ref structure lptime)

systemtime 结构体在PB中已经定义,
在代码中传入这个函数:
PB代码:
systemtime tm;
GetSystemTime(tm);

C++中的函数代码:

// Method callable from PowerBuilder
PBXRESULT CSocket::f_wsastartup( PBCallInfo * ci )
{
    PBXRESULT pbxr = PBX_OK; 
    LPSYSTEMTIME lptm = (LPSYSTEMTIME)ci->pArgs->GetAt(0)->GetClass();  
//    LPSYSTEMTIME lptm = (LPSYSTEMTIME)ci->pArgs->GetAt(0)->GetObject();  
    GetSysteTime(lptm);
    return pbxr;
}


问题是不能获取到PB中传入结构体正确的指针地址。所以引发内存异常。
例如:获取string字符串的变量地址,可以使用m_pSeesion->GetString();得到LPCTSTR指针。

请问。这个结构体是如何调用的,在PB中如声明。C++中如何引用。

现在这个难题,自己还不能突破,请前辈能指点一下迷茫。
不甚感激。。。

------解决方案--------------------
PB的调用API时一般也可以用数组代替,主要是类型的大小要控制好,如int 和 long所占字节数
------解决方案--------------------
PB通过结构体与PBNI交互时,pbni代码是pbobject了,你应该通过pbobject obj = ci->pArgs->GetAt(0)->GetObject();来获取pb传递的对象
  相关解决方案