N
nth
Unregistered / Unconfirmed
GUEST, unregistred user!
TAppInfo是一个继承于TObject的类. 现在我想将这个对象传递给一个Com组件处理,但com组件只能兼容OleVariant类型.
请教高手我如何将这个对象能传递到这个Com对象中,或者告诉我如何将这样的对象存入OleVariant类型的变量中. 最终目标想通过这样的方法, 来实现组件的物理分离.
之前我试过很多方法,就是将对象序列化,通过动态数组来传递:
var ole:OleVariant;
procedure TForm1.btn1Click(Sender: TObject);
var ms:tmemorystream;
slt: TStrings;
begin
slt:= TStringList.Create;
slt.Add('obj',AppInfo);
ole := ToOle(slt) ;
ComObj.Enter(ole); // 对Com对象调用,类型为OleVariant
end;
function TForm1.ToOle(sltObj: TStrings): OleVariant;
var ms:tmemorystream;
begin
ms := Tmemorystream.create;
try
sltObj.SaveToStream(ms); // 呵呵... 别笑话我,当时我只希望能通过这样的方法将对象序列化.
result := vararraycreate([0,ms.size-1],varbyte);
ms.position := 0;
ms.readbuffer(varArrayLock(result)^, ms.size);
finally
ms.free;
varArrayunlock(result);
end;
end;
但,结果很显然失败了.
现在我是一点办法都没有,跪谢!
请教高手我如何将这个对象能传递到这个Com对象中,或者告诉我如何将这样的对象存入OleVariant类型的变量中. 最终目标想通过这样的方法, 来实现组件的物理分离.
之前我试过很多方法,就是将对象序列化,通过动态数组来传递:
var ole:OleVariant;
procedure TForm1.btn1Click(Sender: TObject);
var ms:tmemorystream;
slt: TStrings;
begin
slt:= TStringList.Create;
slt.Add('obj',AppInfo);
ole := ToOle(slt) ;
ComObj.Enter(ole); // 对Com对象调用,类型为OleVariant
end;
function TForm1.ToOle(sltObj: TStrings): OleVariant;
var ms:tmemorystream;
begin
ms := Tmemorystream.create;
try
sltObj.SaveToStream(ms); // 呵呵... 别笑话我,当时我只希望能通过这样的方法将对象序列化.
result := vararraycreate([0,ms.size-1],varbyte);
ms.position := 0;
ms.readbuffer(varArrayLock(result)^, ms.size);
finally
ms.free;
varArrayunlock(result);
end;
end;
但,结果很显然失败了.
现在我是一点办法都没有,跪谢!