我想传递自己定义的一个对象实例到远程过程,先采用转换为流,再将流转为Variant进行传递的办法://远程过程
procedure synCsData(iRecord: OleVariant);
var
  BinStrm: TStream;
  formRecord: TrootForm;
  p: Pointer;
begin
  BinStrm:= TMemoryStream.Create;
  BinStrm.Position:= 0;
  p := VarArrayLock(iRecord);
  BinStrm.Write(p^, VarArrayHighBound(iRecord, 1));
  VarArrayUnlock(iRecord);
  BinStrm.Position := 0;
  formRecord:= TrootForm.create;
  BinStrm.Read(formRecord,TrootForm.InstanceSize); //我想问题应该是出在这句吧??  memo1.Lines.Add(formRecord.Forder_no);  //执行到这句就报错,估计这个对象实例没用转换成功
end;//客户端调用
procedure TForm1.Button1Click(Sender: TObject);
var
  iRecorde: TrootForm;
  writeSize: integer;
  AStream: TStream;
  MyBuffer: Pointer;
  paraRecord: oleVariant;
begin
    iRecorde:= TrootForm.create;
    iRecorde.setOrderNo('1232145');
    try    AStream := TMemoryStream.Create;
    writeSize:= AStream.Write(iRecorde,TrootForm.InstanceSize);
    if writeSize<TrootForm.InstanceSize then
      raise Exception.Create('读取错误');    paraRecord:= VarArrayCreate([0, AStream.Size - 1], VarByte);
    MyBuffer := VarArrayLock(paraRecord);
    AStream.Read(MyBuffer^, AStream.Size);
    VarArrayUnlock(paraRecord);    synCsData(paraRecord);
    except
       on E:Exception do
          showmessage(E.message);
    end;
end;
--然后我试着用直接转为Variant的办法:procedure synCsData(iRecord: OleVariant);
var
  BinStrm: TStream;
  formRecord: TrootForm;
  p: Pointer;
begin  formRecord:= TrootForm.create;
  move(iRecord,formRecord,sizeof(iRecord)); //这样用有问题么??  memo1.Lines.Add(formRecord.Forder_no); //还是在这句报错...
end;
//调用
procedure TForm1.Button1Click(Sender: TObject);
var
  iRecorde: TrootForm;
  MyBuffer: Pointer;
  paraRecord: oleVariant;
begin
    iRecorde:= TrootForm.create;
    iRecorde.setOrderNo('1232145');    paraRecord:= VarArrayCreate([0, sizeof(iRecorde)-1], VarByte);
    myBuffer:= VarArrayLock(paraRecord);
    Move(iRecorde,myBuffer^,sizeof(iRecorde));
    VarArrayUnLock(paraRecord);    synCsData(paraRecord);
end;哪里需要改动呢??请高手指点!!