[英]delphi tlb_lib file from com component has no connection between interface and object
將com dll文件導入delphi后,delphi又生成了lib_tlb.pas文件。
檢查顯示的文件
Iinterface1 = interface(IDispatch)
function func: Integer; safecall;
procedure proc(param:Iinterface1);
end;
Cointerface1 = class
class function Create: Iinterface;
class function CreateRemote(const MachineName: string): Iinterface1;
end;
Tinterface1 = class(TOleServer)
function func: Integer;
procedure proc(param:Iinterface1);
end;
現在可以清楚地看到Tinterface1和Iinterface1之間沒有連接。
當使用Tinterface1調用proc時,就會出現問題。 這將不會編譯Tinterface1不會繼承Iinterface1。
那么建議做什么? 更改自動生成的庫? 或者您想將Tinterface1傳遞給proc時該怎么做?
該示例是代碼的簡化,在代碼中有另一個對象需要傳遞給proc,但是proc只知道其接口,這是同樣的問題。
更新:似乎com dll文件的手冊說proc應該是
procedure proc(param:^Tinterface1);
界面僅在delphi角度來看。
TInterface1.Proc()
期望將預先存在的IInterface1
對象作為輸入傳遞給它。 使用Cointerface1.Create()
創建該對象,例如:
var
intf: Iinterface1;
begin
intf := Cointerface1.Create;
TheOleServerInstance.proc(intf);
end;
Tinterface1
是TOleServer
后代,它不直接繼承自Iinterface1
(但確實在內部包裝了Iinterface1
),因此,無論何時要將其傳遞到期望的Iinterface1
位置,都必須對其進行Iinterface1
,例如:
var
intf: Iinterface1;
svr: Iinterface1;
begin
intf := Cointerface1.Create;
if Supports(TheOleServerInstance, Iinterface1, svr) then
intf.proc(svr);
end;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.