簡體   English   中英

來自com組件的delphi tlb_lib文件在接口和對象之間沒有連接

[英]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;

Tinterface1TOleServer后代,它不直接繼承自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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM