![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как передать array of record [Delphi, Windows]
SupKlo © (2005-09-23 10:13:00)Как передать array of record с сервера на клиента
urdolphin (2005-09-25 20:46:00) [1]Живите проще, господа! Зачем что-то рассчитывать? Ситаем Delphi X - Руководство разработчика (Стив Тейксера, Ксавье Пачеко). Там все подробненько описано (только не про DCOM :((( )
isasa (2005-09-23 10:40:00) [2]FXi[i]:=pArr^[i].Xi*0.01; =>FXi[i]:=pArr^[i].Xi;
isasa (2005-09-23 10:36:00) [3]На клиенте имеем
type
...
rComponent = record
id : integer;
Xi : double;
dXi : double;
end;
TrComponent = array of rComponent;
...
var
...
Comp : TrComponent;
...
function DynArrayToVar(var buf; dataLen: cardinal): variant;
var p : pointer;
begin
Result:=VarArrayCreate([0, dataLen], varByte);
p:=VarArrayLock(Result);
move(buf, p^, dataLen);
VarArrayUnlock(Result);
end;
вызов на клиенте
propInterf.Components:=DynArrayToVar(Comp, (high(Comp)-low(Comp)+1)*sizeof(rComponent));
Сервер
TautoFLClass = class(TAutoObject)
...
protected
Fks : array of integer;
FXi : array of double;
FdXi : array of double;
...
procedure Set_Components(value : OleVariant); safecall;
...
end;
procedure TautoFLClass.Set_Components(value: OleVariant);
var pArr : ParComponent;
dataLen : Cardinal;
i : integer;
begin
dataLen:=VarArrayHighBound(Value, VarArrayDimCount(Value));
i:=dataLen div SizeOf(rComponent);
SetLength(Fks, i);
SetLength(FXi, i);
SetLength(FdXi, i);
pArr:=VarArrayLock(Value);
for i:=low(Fks) to high(Fks) do begin
Fks[i]:=pArr^[i].id;
FXi[i]:=pArr^[i].Xi*0.01;
FdXi[i]:=pArr^[i].dXi;
end;
VarArrayUnLock(Value);
end;