有一函数如下:
function BigImageCallback( pFirstParameter: Pointer; dwCarID: LongWord;//大图结果回调函数
  wImageWidth: Word; wImageHigh: Word; bType: Byte; wSize: Word;
  pbImage: Pointer; wImageID: Word; wReserved: Word; wPlateWidth: Word;
  wPlateHigh: Word; dwTimeMs: Int64 ): Integer; cdecl;
var
  MyResult: ^TResult;
  iHigh,item,iSize:integer;
   MyStream : TMemoryStream;
   BigData:array[1..731000] of byte;
   BigData2:array of byte;
   strtmp:string;
begin
  iSize := 0;
  Lock.Acquire;
  try
    Result := 0;
    MyResult :=  pFirstParameter ;
    if (wReserved and $FF00) <> 0 then
    begin
      iHigh :=  (wReserved and $00FF);
      iHigh := iHigh shl 16;
      iSize := wSize + iHigh;
    end
    else
    begin
       iSize :=  wSize;
    end;    SetLength( BigData2,731000);//设置长度
    CopyMemory( BigData2, pbImage,iSize );//pbImageo 数据指针

     MyStream := TMemoryStream.Create;
     MyStream.Seek(0, soFromBeginning);
     item := 0;
     MyStream.Write(BigData2, iSize);//这里出错(但如果用BigData,不用SetLength,就没有问题????)
     strtmp := 'c:\' + inttostr(dwTimeMs) + inttostr(dwCarID) + '.jpg';
     MyStream.SaveToFile(strtmp);
     MyStream.Free();
  finally
    Lock.Release;
  end;
end;

解决方案 »

  1.   

    MyStream.Write(BigData2,   iSize);//出错了!!但是用固定数组不没事BigData为什么?
      

  2.   

    MyStream.Write(BigData2,       iSize);//出错了!!但是用固定数组不没事BigData为什么?
    =============
    MyStream.Write((@BigData2[0])^,       iSize);//
      

  3.   

    按上面的方法,静态数组当中传入的是首地址,而动态数组传入的是指向数组首地址的指针,这是两者的区别。而Write所需要的参数不是指针,而是首地址。