试用OleVariant: var o: OleVariant; s: TStringStream; n: Longint; o:=VarArrayCreate([1, s.Size], varByte); for n:=1 to s.Size do o[n] := s.DataString[n];将o传过去!
转帖From: "David Lewis "(borland newsgroup)On the client :procedure TransferFile( FileName: String ); var AStream: TFileStream; FileSize: Integer; FileVariant: OleVariant; MyBuffer: Pointer; begin AStream := Nil; FileVariant := DComConnection.AppServer.TransferFile( FileName ); If VarIsNull( FileVariant ) Then Exit; Try If FileExists( FileName ) Then AStream := TFileStream.Create( FileName, fmOpenReadWrite ) Else AStream := TFileStream.Create( FileName, fmCreate ); FileSize := VarArrayHighBound( FileVariant, 1 ) + 1; MyBuffer := VarArrayLock( FileVariant ); AStream.Write( MyBuffer^, FileSize ); VarArrayUnlock( FileVariant ); Finally If Assigned( AStream ) Then AStream.Free; End; end;Then on the server, I created an automation method to supply the file :function GetTransferFile( FileName: OleVariant ): OleVariant; var AStream: TFileStream; MyBuffer: Pointer; begin Result := Null; AStream := Nil; If Not FileExists( FileName ) Then Exit; Try AStream := TFileStream.Create( FileName, fmOpenRead ); Result := VarArrayCreate( [0, AStream.Size - 1], VarByte ); MyBuffer := VarArrayLock( Result ); AStream.ReadBuffer( MyBuffer^, AStream.Size ); VarArrayUnlock( Result ); Finally AStream.Free; End; end;
这就是我想解决的问题.
var
o: OleVariant;
s: TStringStream;
n: Longint; o:=VarArrayCreate([1, s.Size], varByte);
for n:=1 to s.Size do
o[n] := s.DataString[n];将o传过去!
var
AStream: TFileStream;
FileSize: Integer;
FileVariant: OleVariant;
MyBuffer: Pointer;
begin
AStream := Nil;
FileVariant := DComConnection.AppServer.TransferFile( FileName );
If VarIsNull( FileVariant ) Then
Exit; Try
If FileExists( FileName ) Then
AStream := TFileStream.Create( FileName, fmOpenReadWrite )
Else
AStream := TFileStream.Create( FileName, fmCreate );
FileSize := VarArrayHighBound( FileVariant, 1 ) + 1;
MyBuffer := VarArrayLock( FileVariant );
AStream.Write( MyBuffer^, FileSize );
VarArrayUnlock( FileVariant );
Finally
If Assigned( AStream ) Then
AStream.Free;
End;
end;Then on the server, I created an automation method to supply the file :function GetTransferFile( FileName: OleVariant ): OleVariant;
var
AStream: TFileStream;
MyBuffer: Pointer;
begin
Result := Null;
AStream := Nil; If Not FileExists( FileName ) Then
Exit; Try
AStream := TFileStream.Create( FileName, fmOpenRead );
Result := VarArrayCreate( [0, AStream.Size - 1], VarByte );
MyBuffer := VarArrayLock( Result );
AStream.ReadBuffer( MyBuffer^, AStream.Size );
VarArrayUnlock( Result );
Finally
AStream.Free;
End;
end;