procedure TForm1.Button2Click(Sender: TObject);
var
   vector: Pointer;
   fileStream: TMemoryStream;
   size : Integer;
begin
    fileStream.LoadFromFile('C:\1.pse');
    size := fileStream.size;
    
    CipherManager1.CipherClass := TCipherClass(TCipher_3TDES );
    
    if not CipherManager1.CipherClass.SelfTest then
        MessageBox(Handle, 'Self Test failed', 'Cipher Self Test', mb_Ok);    vector := Pchar('00000000000000000000000000000000000000000000000000000000');
    CipherManager1.InitKey( 'KKKKKKKKKKKKKKKKKKKKKKKKKK',vector );    CipherManager1.DecodeBuffer(fileStream.memory^, fileStream.memory^, size  ); //此句报非法内存访问    
end;end.

解决方案 »

  1.   

    没创建,就使用了,所以报告异常!
    procedure TForm1.Button2Click(Sender: TObject);
    var
      vector: Pointer;
      fileStream: TMemoryStream;
      size : Integer;
    begin
      fileStream = TMemoryStream.create;
      try
        fileStream.LoadFromFile('C:\1.pse');
        size := fileStream.size;
       
        CipherManager1.CipherClass := TCipherClass(TCipher_3TDES );
       
        if not CipherManager1.CipherClass.SelfTest then
            MessageBox(Handle, 'Self Test failed', 'Cipher Self Test', mb_Ok);    vector := Pchar('00000000000000000000000000000000000000000000000000000000');
        CipherManager1.InitKey( 'KKKKKKKKKKKKKKKKKKKKKKKKKK',vector );    CipherManager1.DecodeBuffer(fileStream.memory^, fileStream.memory^, size  ); //此句报非法内存访问
      finally
        filestream.free;
      end;   
    end; 
      

  2.   

    本帖最后由 bdmh 于 2009-06-25 15:50:06 编辑
      

  3.   

    1、可能就是没有创建的原因
    2、CipherManager1.DecodeBuffer方法的前两个参数传入同样内容?
      

  4.   

    fileStream: TMemoryStream; 
      size : Integer; 
    begin 
        fileStream.LoadFromFile('C:\1.pse'); 
    fileStream还没有创建实例怎么能直接加载文件啊呵呵,我不写DELPHI,用JAVA的,路过看看的
      

  5.   

    问题解决了。是流没有create的原因。多谢各位。
    不知有人用过Delphi encryption cipher这个控件没?