procedure TFormMain.btnSaveToFileClick(Sender: TObject);
var
  pIn,szBuffer:Pointer;  MyStream:TMemoryStream;  iLen: Integer;
  Ret:Boolean;
begin
  if self.OpenDialog1.Execute then
  begin
    MyStream:=TMemoryStream.Create;    MyStream.LoadFromFile(Self.OpenDialog1.FileName);    GetMem(pIn,MyStream.Size);    try
      MyStream.ReadBuffer(pIn,MyStream.size); //为什么这行会失败??      iLen:=CalcDecodedSize(pIn,mystream.size);
      GetMem(szBuffer,iLen);      //pIn:[email protected][1];
      try
        Base64Decode(pIn,mystream.size,szBuffer);        MyStream.Free;        try
          MyStream.Create;          MyStream.WriteBuffer(szBuffer,iLen);          if self.SaveDialog1.Execute then
            MyStream.SaveToFile(self.SaveDialog1.FileName);
        finally
          MyStream.Free;
        end;      finally
        FreeMem(szBuffer);
      end;
    finally
      FreeMem(pIn);
      MyStream.Free;
    end;  end;
end;

解决方案 »

  1.   

    MyStream.ReadBuffer(pIn^,MyStream.size);
      

  2.   

    谢谢各位。这个问题虽解决了,但又发生另外一个问题:procedure TFormMain.btnSaveToFileClick(Sender: TObject);
    var
      iLen: Integer;
      pIn,szBuffer:Pointer;  MyStream:TMemoryStream;begin
      if self.OpenDialog1.Execute then
      begin
        MyStream:=TMemoryStream.Create;    MyStream.LoadFromFile(Self.OpenDialog1.FileName);    GetMem(pIn,MyStream.Size);    try
          MyStream.ReadBuffer(pIn^,MyStream.size); /      iLen:=CalcDecodedSize(pIn,mystream.size);
          GetMem(szBuffer,iLen);      //pIn:[email protected][1];
          try
            Base64Decode(pIn,mystream.size,szBuffer); //执行这行后,变量iLen由原来的89654变为10036252,导致后面ilen使用不正确,这是为何??        MyStream.Free;        try
              MyStream.Create;          MyStream.WriteBuffer(szBuffer^,iLen); //这个iLen就不正确了。          if self.SaveDialog1.Execute then
                MyStream.SaveToFile(self.SaveDialog1.FileName);
            finally
              MyStream.Free;
            end;      finally
            FreeMem(szBuffer);
          end;
        finally
          FreeMem(pIn);
          MyStream.Free;
        end;  end;
    end;
      

  3.   

    找到原因了,Base64Decode(pIn,mystream.size,szBuffer);是用汇编写的,参数ilen(esi)被它改了。