挑战高手:接口怎么转换成对象? (100分)

  • 主题发起人 主题发起人 softdeveloper
  • 开始时间 开始时间
S

softdeveloper

Unregistered / Unconfirmed
GUEST, unregistred user!
外部在调用COM时,如果参数是对象,只能以接口的形式传入。可是在COM内部,有时却要使用到对象,有什么方法可以把接口再转换成对象吗?好像用强制转换是不对的
 
 没用过,学习
 
最简单的办法就是传一个整数,然后再强制转换就可以了。
例如
var
ObjectHandle: Integer;
begin
ObjectHandle := Integer(Obj);
....
end;

var
aObj: TMyObj;
begin
aObj = TMyObj(ObjectHandle);
....
end;
 
老大,外部传入的是接口耶!在COM外面没有对象啊[:(]
 
不是再让你传一个整数吗?
如:
myobj = Tmyobj.create;
myintf = myobj as Imyintf;
就是把myobj先记下来,然后把它转换成整数传进去。
如果这个传进去的接口不是你自己创建的那就没办法了。
 
如果COM是In-process的那么可以把对象强制转换成Integer,然后在COM里再把Integer强制转换成对象
注意:COM对象的方法的参数必须是Integer,而不能是Interface,否则你把一个对象转换成Interface后再转回对象是不行的。因为DELPHI里Interface只是对象的一个子集或者说是属性。
 
定义一个内部的接口,在每个对象上实现该接口,并且这个接口对外部不提供资料
IInternalGetObject = Interface(IInterface)
Function _GetObject: TObject;
end;
 
后退
顶部