客户端:
 with clientdataset do
  begin
    Close; Filter := ''; Params.Clear;
    RemoteServer := clientdm.SCon_ZD;
    ProviderName := 'dsp_OpenProc';
    clientdm.socketconnect.AppServer.OpenProc(sProcedureName, vParams);//此处调用服务器端函数
    Open;
 //    result:=recordcount;    FetchParams;  //此处出现incalid argument错误信息,错误的类型为EVariantInvalidArgError 
    Result := Params[0].AsInteger;
  end;服务器端:
function tserver.OpenProc(const ProcedureName: WideString;
  vInputParams: OleVariant): Integer;
var
  Params : TParams;
  I : Integer;
begin
  with sp_OpenProc do
  begin
    Close;
    ProcedureName := ProcedureName;
    Parameters.Refresh;
    Params := TParams.Create;    UnPackParams(vInputParams, Params);
    for I := 1 to Parameters.Count - 1 do    
      if (Parameters[i].Direction in [pdInput, pdInputOutput]) then
      begin
        if Parameters[i].DataType = ftBCD then
        begin
          Parameters[i].DataType := ftFloat;
          Parameters[i].Value := Params.ParamByName(Parameters[i].Name).AsFloat;
        end
        else
          Parameters[i].Value := Params.ParamByName(Parameters[i].Name).Value;
      end;
  end;   
  Params.Free;
  Result := 0;
end;