如何将一个对象封装到OleVariant ( 积分: 200 )

  • 主题发起人 主题发起人 nth
  • 开始时间 开始时间
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;
但,结果很显然失败了.

现在我是一点办法都没有,跪谢!
 
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;
但,结果很显然失败了.

现在我是一点办法都没有,跪谢!
 
后退
顶部