来自com组件的delphi tlb_lib文件在接口和对象之间没有连接

时间:2012-03-04 14:51:38

标签: delphi com interface delphi-2009

在导入到delphi的com dll文件后,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。

那么建议做什么?更改自动生成的lib?或者你想知道在想要将Tinterface1传递给proc时该怎么做。

示例是代码的简化,在代码中有另一个对象需要传递给proc,但是proc只知道它的接口,这是同样的问题。

更新:因为它似乎是com dll文件的手册,说proc应该是

    procedure proc(param:^Tinterface1);

其中接口仅以delphi的观点出现。

1 个答案:

答案 0 :(得分:3)

TInterface1.Proc()期望将预先存在的IInterface1对象作为输入传递给它。使用Cointerface1.Create()创建该对象,例如:

var
  intf: Iinterface1;
begin
  intf := Cointerface1.Create;
  TheOleServerInstance.proc(intf);
end;

Tinterface1是一个TOleServer后代,不会直接从Iinterface1继承(但它会在内部包裹Iinterface1),所以你必须随时投出它将它传递到预期Iinterface1的位置,例如:

var
  intf: Iinterface1;
  svr: Iinterface1;
begin
  intf := Cointerface1.Create;
  if Supports(TheOleServerInstance, Iinterface1, svr) then
    intf.proc(svr);
end;