L
looyo
Unregistered / Unconfirmed
GUEST, unregistred user!
我定义了一个接口
Imytaskcom = interface
['{36D28881-E03D-4A49-8343-54F3E02E5110}']
functiondo
action(p1:tcomponent):HRESULT;
end;
我实现一个com对象如下
use unit1,...........;{unit1中定义了一个窗体}
Tmytask = class(TTypedComObject, Imytaskcom)
public
functiondo
action(p1:tcomponent):HRESULT;
end;
fuction tmytask.doaction(p1:tcomponent):HRESULT;
var mycom:Imytaskcom;
mytaskform:tform1;{tform1在unit1中定义}
begin
mytaskform:=tform1.create(p1);{p1作为这个窗体的父窗体}
mytaskform.show;
end;
我的客户程序这样调用
mycom:Imytaskcom
mycom:=createcomobject(class_mytask) as Imytaskcom;{class_mytask是com对象的guid}
mycom.doaction(form1);{form1为客户程序的主窗体}
以上com对象和客户程序都可以编译成功。
关键是运行mycom.doaction(form1);这一步出错EAccessViolation
好像是不能将tcomponent作为参数传递。
谁能解决这个问题我的要求是客户程序不变,通过
mycom:=createcomobject(class_mytask) as Imytaskcom中class_mytask的值的变动
来调用不同com对象中的窗体
Imytaskcom = interface
['{36D28881-E03D-4A49-8343-54F3E02E5110}']
functiondo
action(p1:tcomponent):HRESULT;
end;
我实现一个com对象如下
use unit1,...........;{unit1中定义了一个窗体}
Tmytask = class(TTypedComObject, Imytaskcom)
public
functiondo
action(p1:tcomponent):HRESULT;
end;
fuction tmytask.doaction(p1:tcomponent):HRESULT;
var mycom:Imytaskcom;
mytaskform:tform1;{tform1在unit1中定义}
begin
mytaskform:=tform1.create(p1);{p1作为这个窗体的父窗体}
mytaskform.show;
end;
我的客户程序这样调用
mycom:Imytaskcom
mycom:=createcomobject(class_mytask) as Imytaskcom;{class_mytask是com对象的guid}
mycom.doaction(form1);{form1为客户程序的主窗体}
以上com对象和客户程序都可以编译成功。
关键是运行mycom.doaction(form1);这一步出错EAccessViolation
好像是不能将tcomponent作为参数传递。
谁能解决这个问题我的要求是客户程序不变,通过
mycom:=createcomobject(class_mytask) as Imytaskcom中class_mytask的值的变动
来调用不同com对象中的窗体