急,编写Com接口是如何以动态数组作为输入参数,内存在哪释放!(20分)

  • 主题发起人 主题发起人 SupperDog
  • 开始时间 开始时间
用vararray
vararraycreate;
vararraylock;
vararrayunlock;
查看help
 
接口方法不支持该种类型参数,
最好有例子
 
用variant。
 
我试过不行,那位做过,麻烦给个例子.多谢!!
 
哇,这么多狗,来看看![8D][8D][8D][8D]
 
olevariant
vararraycreate;
vararraylock;
vararrayunlock
 
用variant不行吗,我们的com组件接受数组就是用variant呀。
 
var
tempvar:OleVariant;
begin
tempvar:=VarArrayCreate([0,2],varString);
时出错
那位给个例子
 
可以的。
我是这样实现的。
在COM里提供接口方法,给出var v: Variants类型参数。
再另外在另一个DLL里把这个函数包装一下,直接把Variants转成你实际上的数据类型。
如果你还需要代码的话,我可以贴出来给你。
olevariant
vararraycreate;
vararraylock;
move
vararrayunlock
 
现在我做这方面的操作,都是字符串,数组不用了。这方面的技术你可以参考INDY的邮件解
部分是如何解析各种需要的数据的。
 
to :wlmmlw
可以把你的代码贴出来吗?
多谢!!
 
/////服务端
procedure TCOMserver.GetAllTables(var vTables: OleVariant);
var
tbList: TStringList;
iCount: Integer;
begin
tbList := TStringList.Create;
try
conn.GetTableNames(tbList);
vTables := VarArrayCreate([0, tbList.Count - 1], varVariant);
for iCount := 0 to tbList.Count - 1do
vTables[iCount] := tbList[iCount];
finally
tbList.Free;
end;
end;
//客户段
procedure Tfrm_clent.btn_gettableClick(Sender: TObject);
var
vtbList: Variant;
iCount: Integer;
begin
DCOMConnection1.Connected := True;
DCOMConnection1.AppServer.GetAllTables(vtbList);
if VarIsArray(vtbList) then
begin
for iCount := VarArrayLowBound(vtbList, 1) to VarArrayHighBound(vtbList, 1)do
lbtables.Items.Add(vtbList[iCount]);
end
end;
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
930
SUNSTONE的Delphi笔记
S
后退
顶部