社区
网络通信/分布式开发
帖子详情
如何将任意一种数据转化成 variant 的数据类型 将它们传递给一个COM接口?
duxin
2003-10-18 11:14:09
很急 1000分 重谢
...全文
71
10
打赏
收藏
如何将任意一种数据转化成 variant 的数据类型 将它们传递给一个COM接口?
很急 1000分 重谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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分很吸引人呀,我第一个顶,
给我分点把??
COM
技术内幕——微软组件对象模型--随书源代码
3.2.5 若能够从某
接口
获取某特定
接口
,则从
任意
接口
都将能够获取此
接口
42 3.3 QueryInterface定义了组件 43 3.3.1
接口
集 44 3.4 新版本组件的处理 44 3.4.1 何时需要建立
一个
新版本 46 3.4.2 不同版本
接口
的...
C#微软培训资料
第三章 编写第
一个
应用程序 .20 3.1 Wel
com
e 程序 .20 3.2 代 码 分 析 .20 3.3 运 行 程 序 .23 .4 添 加 注 释 .25 3.5 小 结 .27 第二部分 C#程序设计基础.28 第四章 数 据 类 型 .28 4.1 值 类 型...
用户自定义结构
数据
与
VARIANT
转换
将用户自定义的C结构
数据
存储成
VARIANT
类型,需要时再将
VARIANT
类型转为用户自定义的结构
数据
,有十分现实的意义,既然我们不想为这样的结构
数据
写
一个
COM
包装类。虽然有很多方法和手段生成这样的
VARIANT
,但是,...
Q
Variant
存取
任意
类型的指针 、自定义
数据
类型
(****)
Q
Variant
存取
任意
类型的指针,自定义
数据
类型
CString 与
数据
类型
的转换方法
CString 是
一种
很有用的
数据
类型
。它们很大程度上简化了MFC中的许多操作,使得MFC在做字符串操作的时候方便了很多。不管怎样,使用CString有很多特殊的技巧,特别是对于纯C背景下走出来的程序员来说有点难以学习。...
网络通信/分布式开发
1,593
社区成员
32,963
社区内容
发帖
与我相关
我的任务
网络通信/分布式开发
Delphi 网络通信/分布式开发
复制链接
扫一扫
分享
社区描述
Delphi 网络通信/分布式开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章