在导入到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的观点出现。
答案 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;