目前有個專案要在delphi里呼叫一系列的Webservice(也是delphi寫的),正常我們是這樣寫的:
mHttpRio := THTTPRIO.Create(nil);
mHttpRio.URL := 'XXXXXXXXXXXXXXX';
Result := (mHttpRio as ITest).Test;
想到delphi有泛型,于是設計了一個函式:
GetRemoteService<T>: T;
begin
mHttpRio := THTTPRIO.Create(nil);
mHttpRio.URL := 'XXXXXXXXXXXXXXX';
//問題來了,接下里我怎么把 mHttpRio 轉換成 T型別后回傳??
end;
實際呼叫時我只需要;
var
mService: ITest;
begin
mService := GetRemoteService<ITest>;
Result := mService.Test;
end;
備注:我設計這個函式的目的:1、若干Webservice的介面型別不一樣;
2、每個Webservice的url也是不一樣的,但可以透過介面型別去獲取
uj5u.com熱心網友回復:
自己在發帖后的5分鐘內解決:function GetRemoteService<T>: T;
begin
mHttpRio := THTTPRIO.Create(nil);
mHttpRio.URL := 'XXXXXXXXXXXXXXX';
mHttpRio.QueryInterface(GetTypeData(TypeInfo(T)).Guid, Result);
end;
uj5u.com熱心網友回復:
發貼果然有助于問題的解決, GetTypeData(TypeInfo(T)).Guid 這個挺好uj5u.com熱心網友回復:
解決了,頂一下,接分。uj5u.com熱心網友回復:
泛型不熟。順便問一下,Supports 不能用嗎?
uj5u.com熱心網友回復:
好!又學到一招!
uj5u.com熱心網友回復:
還在用D7的路過,泛型是好啊轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/70449.html
標籤:語言基礎/算法/系統設計
上一篇:基于chrome框架的libcef控制元件呼叫javascript顯示地圖問題
下一篇:datasnap牛人來解惑
