/**//////////////////////////////////////////////////////////////////////////////////////////////Web Service unit Unit3;interfaceuses InvokeRegistry,Graphics,Classes,Unit2,Types;type TQueryCapital = class(TInvokableClass, IQueryCapital) public function GetPic:TByteDynArray; stdcall; function GetPicSize:LongInt; stdcall; end;implementationfunction ByteArrayFromStream( inStream : TMemoryStream ) : TByteDynArray;var pTemp : pointer;begin SetLength(Result, inStream.Size ); pTemp := @Result[0]; inStream.Position := 0; inStream.Read(pTemp^, inStream.Size);end;//TByteDynArray 做返回值 是重点function TQueryCapital.GetPic:TByteDynArray;var tfs : TMemorystream; outByAr : TByteDynArray;begin tfs:=TMemorystream.Create; tfs.LoadFromFile('1.jpg'); tfs.Position := 0; Result := ByteArrayFromStream(tfs);end;function TQueryCapital.GetPicSize: LongInt;var Pic : TPicture; tfs : TMemorystream; ss :string;begin ss :=''; tfs:=TMemorystream.Create; tfs.LoadFromFile('1.jpg'); tfs.Position := 0; SetLength(ss, tfs.Size); tfs.Read(ss[1], tfs.Size); Result := Length(ss);end;initialization InvRegistry.RegisterInvokableClass(TQueryCapital...{, ShakespeareFactory});end./**////////////////////////////////////////////////////////////////////////////////////////Clientunit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,iquerycapital1,Types, ExtCtrls, StdCtrls, Rio, SOAPHTTPClient,jpeg;type TForm1 = class(TForm) HTTPRIO1: THTTPRIO; Button1: TButton; Image1: TImage; procedure Button1Click(Sender: TObject); private procedure ByteArrayCompressedToImage(const ByteArray : TByteDynArray); ...{ Private declarations } public ...{ Public declarations } end;var Form1: TForm1;implementation...{$R *.dfm}procedure CopyToStream( const InArray : TByteDynArray ; outStream : TStream );var pTemp : Pointer;begin pTemp := @InArray[0]; outStream.Write( pTemp^, Length(InArray));end;procedure TForm1.ByteArrayCompressedToImage( const ByteArray : TByteDynArray);var MStream : TMemoryStream; Jpg : TJpegImage;begin MStream := TMemoryStream.Create; CopyToStream( ByteArray, MStream ); MStream.Position := 0; Jpg :=TJpegImage.Create; try Image1.Picture.Graphic:=Jpg; //设置图片框的格式 Image1.Picture.Graphic.LoadFromStream(MStream); //将地址下的文件通过内存流写入图片框中 Image1.Repaint; finally MStream.Free; end;end;procedure TForm1.Button1Click(Sender: TObject);var ByteArray : TByteDynArray;begin ByteArray := (HTTPRIO1 as IQueryCapital).GetPic; ByteArrayCompressedToImage(ByteArray);end;end./**////////////////////////////////////////////////////////////////////////////////////////////////////////为一个朋友面试做的小程序程序://通过WebServices 访问服务器上的一张图片//开始的时候通过 服务器上加载 图片文件,然后通过WebService 直接传TPicture 对象到Client。发现这条路不行;//后来想到用 WebService传String到Client; 图片文件转成String成功。Client段接收WebService传过来的String,数据出现丢失 //用 TByteDynArray 传图片文件成功!!!!!!!!