• 全部
  • 语言基础/算法/系统设计
  • 数据库相关
  • 图形处理/多媒体
  • 网络通信/分布式开发
  • VCL组件开发及应用
  • Windows SDK/API
  • 问答

COM 高手请进:如何把一个数组参数传进组件?

neweb 2002-03-14 11:12:20
有一系列坐标点(个数>=3)如[(10,10),(10,70),(30,30),(30,70),(70,30)]要传进ASP组件,如何做?

我一点头绪都没有,希望能给点启发性的代码?
...全文
53 点赞 收藏 8
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
CeleronII 2002-03-15
首先定义一个Variant类型的数组,用VarArrayCreate函数来创建。
在COM服务器端,接口也声明OLE VARIANT类型,这样一来就可以直接传了。
回复
jjianxin2001 2002-03-15
因为COM/DCOM对象都不在Client程序运行的内存空间(内进程COM对象除外,即便如此,为了统一接口,内进程的COM也不得传递指针),而且在Win32中所有的程序都有自己独立的2GB的内存空间,程序与程序之间传递指针(内存地址)是毫无意义的,而数组、字符串等大量的数据在程序中都是分配一定的内存空间,然后用指针加内存偏移量来存取数据的,这时,如何在COM/DCOM对象中如何传递呢?
在Win32中引入了一新变量Variant,可以通过Variant传递数组。具体的实现方法,用Delphi实现为:

Server(COM/DCOM程序)端:

procedure TTestDCOM.Send4(Size: Integer; D1: OleVariant);
type
TData=array [0..999] of Byte;
Var
Data:TData;
i:Integer;
begin
for i:=0 to Size-1 do begin
Data[i]:=D1[i];
end;
end;


Cleint端:

Var
D1:OleVariant;
begin
D1:=VarArrayCreate([0,99],varByte);

{
D1[1]:=45;
.... //将值存入D1中

}
S.Send4(99,D1); //S是TestDCOM对象

end;

回复
neweb 2002-03-15
看了你们微软式的帮助,我终于搞定了,谢谢各位!
回复
chechy 2002-03-14
应该就是这样吧:
aa[0, 0];
aa[0, 1];
...
回复
neweb 2002-03-14
我没有把意思说明白,是这样的,客户程序是ASP,

<%
'10 10 30 30 70   
'10 70 30 70 30
  
dim aa(5,2)

aa(0,0) = 10
aa(0,1) = 10
aa(1,0) = 10
aa(1,1) = 70
.
.
.
aa(4,0) = 70
aa(4,1) = 30

someObj.function1 aa
%>

组件里怎么得到这个数组?要基本原样,比如:
point1(aa[0,0],aa[0,1])
回复
chechy 2002-03-14
var
a: OleVariant;

a := VarArrayCreate([0, 4], varVariant);
a[0] := VarArrayOf([10, 10]);
a[1] := VarArrayOf([10, 70]);
...
a[4] := VarArrayOf([70, 30]);
回复
strip 2002-03-14
字符串 BSTR就好了,最简单,
回复
Bardo 2002-03-14
定义一个数组
然后赋值给变体
传出来
传进去都行!
回复
相关推荐
发帖
Delphi
创建于2007-08-02

4875

社区成员

Delphi 开发及应用
申请成为版主
帖子事件
创建了帖子
2002-03-14 11:12
社区公告
暂无公告