星期五, 七月 30, 2004

SOAP处理复杂的数据类型的问题

把片段写一下:


class TessaysInfo : public TRemotable{
private:
AnsiString FEssayID;
AnsiString FEssayTitle;
__published:
__property
AnsiString EssayID = { read=FEssayID, write=FEssayID };
__property AnsiString EssayTitle = { read=FEssayTitle, write=FEssayTitle };
};
typedef DynamicArray TEssaysInfos;



TEssaysInfos TWSComplexDataTypeDemoImpl::GetEssayTitles(void)
{
int iNo;
int iID;
TEssayInfo *peInfo;
TTransactionDesc TD;
TEssaysInfo sResult;

CreateDataModule();

TD.TransactionID = 1;
TD.IsolationLevel = xilREADCOMMITTED;
try
{
dmMyEssays->sconnMyEssays->StartTransaction(TD);
iNo = dmMyEssays->sdsMyEssays->RecordCount;
sResult.set_length(iNo);
iID = -1;
while ( !dmMyEssays->sdsMyEssays->Eof)
{
iID++;
peInfo = new TEssaysInfo(); // 一定要new么??
//还有在这个程序里new后为什么没有delete

peInfo->EssayID = iID;
peInfo->EssayTitle = dmMyEssays->sdsMyEssays->FieldByName("ETITLE")->Value;
sResult[iID] = peInfo;
dmMyEssays->sdsMyEssays->Next();
}
}


__finally
{
dmMyEssays->sconnMyEssays->Commit(TD);
FreeDataModule();
}
return sResult;
}

已解决.........答案如下
(2004-07-30 10:01:06) 猛禽/Romyo
所有的REMOTABLE派生类对象都由BORLAND的SOAP实现处理释放

(2004-07-30 10:01:29) 猛禽/Romyo
因为它必须在数据被打包发出后才能释放,这个并不在你的控制之中
(2004-07-30 10:01:46) 猛禽/Romyo
这也是为什么必须从TRemotable中派生的原因

静秋

   2010年之前的信息已经无从找到太多的痕迹,照片、日志都没有什么太多的记录。也许哪一天回想起来,我们再补充这一部分的内容。   《三渣树之恋》是那个时间段比较有影响力的电影,虽然我没有去电影院看过,但和丹丹还是一起在家里补习了电影。这电影算是当年的纯爱风吧,情节已不太记得起...