如何将任意一种数据转化成 variant 的数据类型 将它们传递给一个COM接口?

duxin 2003-10-18 11:14:09
很急 1000分 重谢
...全文
71 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
猛禽 2003-10-18
  • 打赏
  • 举报
回复
AD不服啊:)
myling 2003-10-18
  • 打赏
  • 举报
回复
哈哈哈哈,猛禽呀
nyf1220 2003-10-18
  • 打赏
  • 举报
回复
看不懂,说的是什么
duxin 2003-10-18
  • 打赏
  • 举报
回复
代码通过 抽时间作其他数据格式测试 揭贴

1000分不会食言
duxin 2003-10-18
  • 打赏
  • 举报
回复
好 我调一下
猛禽 2003-10-18
  • 打赏
  • 举报
回复
呵,不小心中间一段贴重了:)
dickeybird888 2003-10-18
  • 打赏
  • 举报
回复
(·¥·)
来我先帮助你顶一下:
猛禽 2003-10-18
  • 打赏
  • 举报
回复
不许来抢偶的分

不管怎么样,许多VCL构件都有以流的方式工作的方法和属性。关键就是 TOLEStream 和 TStreamAdapter 的使用。

IStream 被定义在 ActiveX 单元,TStreamAdapter 被定义在 Classes 单元,TOLEStream 则被定义在 Axctrls 单元中。

下面的包裹类将为你提供你所需要的全部东西。(注意:不要将这些函数转化成属性,这样做可能会让你企图调用 IStream 方法,尽管它不是只读的,但是至少我这样做就遇到访问冲突的错误)



Uses Classes, ActiveX, Axctrls;



Type TInterfaceStream = Class ( TMemoryStream )

Public

Procedure LoadFromIStream ;
Function GetIStream : IStream;

end;



Procedure TInterfaceStream.LoadFromIStream(Source : IStream);

var

Adapt : TOLEStream;

Buff : Byte;

I : Integer;

begin

ADapt := TOLEStream.Create(Source);

Adapt.Position := 0;

Self.Clear;

Self.Position := 0;

For I := 0 to Adapt.Size do

begin

Adapt.Read(Buff, 1);

Self.Write(Buff, 1);

end;

Self.Position := 0;

end;



Function TInterfaceStream.GetIStream : IStream;

var

Adapt : TStreamAdapter;

tPos : Int64;

begin

Adapt := TStreamAdapter.Create(Self);

Adapt.Seek(0, 0, tPos);

Result := Adapt as IStream;

end;

现在我们可以很简单地使用 IStream. 假如,你有一个 COM 对象方法需要返回一个 IStream,

那你只需要简单地声明一个private的 TInterfaceStream 成员变量。( 这里我们估且将称它为 FStream ),

在 initialize 时初始化它, 然后照下面的做法实现自己的方法:



Function TSampleCOMObj.Mehtod1 : IStream

begin

// Here's where you load whatever actually goes into the stream

result := FStream.GetIStream;

end;

现在我们可以很简单地使用 IStream. 假如,你有一个 COM 对象方法需要返回一个 IStream,

那你只需要简单地声明一个private的 TInterfaceStream 成员变量。( 这里我们估且将称它为 FStream ),

在 initialize 时初始化它, 然后照下面的做法实现自己的方法:



Function TSampleCOMObj.Mehtod1 : IStream

begin

// Here's where you load whatever actually goes into the stream

result := FStream.GetIStream;

end;


begin

Server := CreateCOMObject(Class_TSampleCOMObj) as ISampleComObj;

temp := Server.method1;

ResultStream := TinterfaceStream.Create;

ResultStream.Clear;

resultStream.Position := 0;

resultstream.LoadFromIStream(Temp);

// do whatever it is you want with the data in the stream;

end;


myling 2003-10-18
  • 打赏
  • 举报
回复
如何将任意一种数据转化成 variant 的数据类型 将它们传递给一个COM接口?


考,你怎么说的不明不白的?

如果你的接口定义好了,传就行了呀
nyf1220 2003-10-18
  • 打赏
  • 举报
回复
不是吧,连斑竹都不会?
1000分很吸引人呀,我第一个顶,
给我分点把??

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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