如何将一个对象封装到OleVariant

nth 2005-07-03 08:25:59
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;
但,结果很显然失败了.

现在我是一点办法都没有,跪谢!
...全文
187 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
newyu1127 2005-11-01
  • 打赏
  • 举报
回复
学习
僵哥 2005-07-04
  • 打赏
  • 举报
回复
若一个类的基类为IUnknown,则可以直接传递给OleVariant做传输。
何鲁青 2005-07-04
  • 打赏
  • 举报
回复
学习...
aiirii 2005-07-03
  • 打赏
  • 举报
回复
可参考如下:
http://www.delphicorner.f9.co.uk/articles/comps5.htm

Implementing Object Persistence using Streams

先将对象写到 stream, 再参考如下:

http://blog.csdn.net/aiirii/archive/2004/11/29/197386.aspx
variant 和 Stream 的互換

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧