用过程返回值 : 使用变参传址具体如下: procedure TDynamicSQLDemoServer.GetAllTables(var vTables:OleVariant); var tblList:TStringList; iCount:Integer; begin try tblList:=TStringList.Creat; adocDSQL.GetTableNames(tblList); vTables:=VarArrayCreate([0,tblList.count-1],varVariant); for iCount:=0 to tblList.Count-1 do begin vTables[iCount]:=tblList.Strings[iCount]; end; finally tblList.Free; end; end; procedure TForm2.btnConnectClick(Sender:TObject); var vtblList:Variant; iCount:Integer; begin SocketConnection1.connected:=True; SocketConnection1.AppServer.GetAllTables(vtblList); if (VarIsArray(vtblList)) then begin for iCount:=VarArrayLowBound(vtblList,1) to VarArrayHighBound(vtblList,1) do begin lbTables.items.add(vtblList[iCount]); end; end; end;
2。返回record类型。
procedure TDynamicSQLDemoServer.GetAllTables(var vTables:OleVariant);
var
tblList:TStringList;
iCount:Integer;
begin
try
tblList:=TStringList.Creat;
adocDSQL.GetTableNames(tblList);
vTables:=VarArrayCreate([0,tblList.count-1],varVariant);
for iCount:=0 to tblList.Count-1 do
begin
vTables[iCount]:=tblList.Strings[iCount];
end;
finally
tblList.Free;
end;
end;
procedure TForm2.btnConnectClick(Sender:TObject);
var
vtblList:Variant;
iCount:Integer;
begin
SocketConnection1.connected:=True;
SocketConnection1.AppServer.GetAllTables(vtblList);
if (VarIsArray(vtblList)) then
begin
for iCount:=VarArrayLowBound(vtblList,1) to VarArrayHighBound(vtblList,1) do
begin
lbTables.items.add(vtblList[iCount]);
end;
end;
end;
你修改了指针所指向变量的值,那实参的值也被改变了!