COM高手请入.....!!!(急,在线等) ( 积分: 30 )

  • 主题发起人 主题发起人 penghua_47
  • 开始时间 开始时间
P

penghua_47

Unregistered / Unconfirmed
GUEST, unregistred user!
这是我创建的一个com对象的类TD,支持两个接口ID和IC:
TD = class(TTypedComObject, ID,IC)
protected
function Method2: HResult; stdcall;//来自ID
function method1: HResult; stdcall;//来自IC
function queryinterface(const IID:TGUID;out obj):HResult;overload;
{Declare ID methods here}
private
pd:Iunknown;
pc:IC;
procedure initialize;override;
end;
现在我想重新使用queryinterface函数,所以把它重载!
但是在写下面的queryinterface函数代码时.老是报错,什么原因啊?
function TD.queryinterface(const IID: TGUID; out obj): HResult;
begin//IID_ID是一个TGUID的量
if (IID=IID_ID) then//报错
begin
obj:= (ID)self;//报错
((ID)self)._AddRef;//报错
end
else if (IID=IID_IC) then//报错
begin
pc.queryinterface(IID,obj);//报错
end
else
begin
obj:=nil;
end;
end;
急,在线等!!!小弟跪求高手们解答!!!
 
这是我创建的一个com对象的类TD,支持两个接口ID和IC:
TD = class(TTypedComObject, ID,IC)
protected
function Method2: HResult; stdcall;//来自ID
function method1: HResult; stdcall;//来自IC
function queryinterface(const IID:TGUID;out obj):HResult;overload;
{Declare ID methods here}
private
pd:Iunknown;
pc:IC;
procedure initialize;override;
end;
现在我想重新使用queryinterface函数,所以把它重载!
但是在写下面的queryinterface函数代码时.老是报错,什么原因啊?
function TD.queryinterface(const IID: TGUID; out obj): HResult;
begin//IID_ID是一个TGUID的量
if (IID=IID_ID) then//报错
begin
obj:= (ID)self;//报错
((ID)self)._AddRef;//报错
end
else if (IID=IID_IC) then//报错
begin
pc.queryinterface(IID,obj);//报错
end
else
begin
obj:=nil;
end;
end;
急,在线等!!!小弟跪求高手们解答!!!
 
if (IID=IID_ID) then//报错
报错为:不匹配的类型!!!
 
使用 IsEqualGUID() 判断 GUID 啊 ...
 
LSUPER,帮我看看,下面代码有什么问题啊?一运行,马上就出现'TD initialize Error!Exit!的提示信息!我30分全给你!
procedure TD.initialize;
var
h:HResult;
begin
inherited;
//获得外部对象的接口指针,以便于传递到聚合的内部对象中去并在适当地时候转回到外部对象的接口中去。
pd:= self as Iunknown;
//利用cocreateinstance创建内部对象C,第二个参数不为空而为外部对象的指针指明了内部对象工作在聚合模式下。
h:=cocreateinstance(CLASS_C,pd,CLSCTX_INPROC_SERVER,IID_Iunknown,pc);
if (failed(h)) then
begin
showmessage('TD initialize Error!Exit!');
exit;
end;
end;
 
接受答案了.
 

Similar threads

后退
顶部