2016-05-20 50 views
0

我將Datasnap服務器遷移到XE 10.1 Berlin,現在當我使用OUT參數調用servermethod時,服務器上出現錯誤。在datasnap servermethod中使用OUT參數時出錯

對象

TBtwlControlePar=class 
    xInDoc, 
    xHandmatig, 
    xStatus, 
    xVerwacht, 
    xAantal, 
    xVerwerkt, 
    xOnVerwerkt, 
    xOnverwerktInDocument, 
    xTotaalCustoms :Integer; 
    end; 

function TPWAdminMethods.DOC_BTWAH_Get2(pPeriode, pMaand, pSort,pSelop,pSelOntvangen,pSelToegewezen,pSelVerwerkt: integer; pSel: string; out pControlePar: TBTWLControlePar): TResult; 

ServerMethod

tmpM := TPWAdminMethodsClient.Create (DMForm.DSConnection.DBXConnection, false); 

客戶

FreeAndNil(fControlePar); 
    tmpResult := tmpM.DOC_VATLH_Get2(Jaar,sort,SelOp,SelOntvangen,SelToegewezen,SelVerwerkt,fSelection,fControlePar);   

當這個方法被解僱服務器對上最後一行的錯誤

procedure TDSMethod.Invoke(MethodInstance: TObject; 
    MethodValues: TDSMethodValues); 
var 
    RContext: TRttiContext; 
    RType: TRttiType; 
    Params: TArrayOfTValue; 
begin 
    Params := MethodValues.GetValues; 
    RType := RContext.GetType(MethodInstance.ClassType); 
    MethodValues.ReturnValue := RType.GetMethod(FMethodInfoHeader.NameFld.ToString).Invoke(MethodInstance, Params); 
end; 

VAN and OUT argument must match parameter type exactly

是不可能使用了德爾福伯林的DataSnap參數,而無需使用DBXJson的?

+0

你確定你使用*相同*的聲明爲類 - 不僅是一個類似的? –

+0

是的,例如,TStream對象也會出現問題。 –

+0

如果您不介意丟失類型安全性,則可以簡單地將'out'參數更改爲指針並執行轉換。轉換爲'TObject'後,做一個'is'來檢查它是否真的是你需要的類,然後你可以安全地將它轉換爲'TBtwlControlePar' – Johan

回答

1

此錯誤消息和問題已作爲RSP-14895登錄Embarcadero的質量門戶網站。這是在16月16日由其他人。那個人說「XE10還行」。 今天(2016年6月14日)我爲這個問題增加了另一個測試項目。我的測試項目是針對VAR參數的情況。我還提供了測試項目的屏幕截圖。我的測試在XE6上工作,但在10.1柏林上失敗。 在解決此問題之前,我無法使用DataSnap。 請投票的問題。