好象用DLL不能把TMemoryStream做参数
因为它是一个Class吧可能跟数据访问有关

解决方案 »

  1.   

    在传入DLL前可能改用array of char来存放数据较好,这样传递一个指针就可以了.TMemoryStream的Read和ReadBuffer函数可以很容易做到这点在DLL里尽量用通用的数据类型较好.
      

  2.   

    DLL中也可以使用任何流,传递没有错误,只是你要看看参数有没有用错.
      

  3.   

    我在主程序里这样写的:
    procedure TForm1.CMUDPDataReceived(Sender: TComponent;
      NumberBytes: Integer; FromIP: String; Port: Integer);
    var
      MessageId:byte;
      MyStream :TMemoryStream;
    begin
      CMUDP.ReadStream(MyStream);
      UDPDataReceived(MyStream); //这个函数就是TDll.dll里面的函数,参数定义肯定没错
                                 //它所做的就是 MyStream.Seek(1,SoFromBeginning);
                                 //            MyStream.Read(Id,1); 
                                 //id是这个流里面的参数。我如果放在一起不用DLL的话就是
                                 //对的。调试的时候指向我的语句
                                 //MyStream.Seek(1,SoFromBeginning);有错误。大家觉得
                                 //是什么原因?我通过了一个ImportDll的.pas文件做为接口
                                 //文件。不明白是哪里错了!end;
      

  4.   

    你好象没有Create吧?
    MyStream:=TMemoryStrem.Create;
    试一试
      

  5.   

    我将MyStream设为全局变量,已经在FormCreate的时候Create了
    :)
      

  6.   

    在DLL传类对象,不太会,你不如把MyStream.Memory作为Pointer传给DLL,然后再传回来一试。
      

  7.   

    流绝对是可以做参数传递的
    我就 做过//***************************************************************************
    //流压缩函数
    //***************************************************************************
    procedure CompressBitmap(var CompressedStream: TMemoryStream;const
          CompressionLevel: TCompressionLevel);
    var
      SourceStream: TCompressionStream;
      DestStream: TMemoryStream;
      Count: Integer;
    Begin
     //获得图像流的原始尺寸
       Count := CompressedStream.Size;
       DestStream := TMemoryStream.Create;
       SourceStream:=TCompressionStream.Create(CompressionLevel, DestStream);
       Try
    //SourceStream是原始的图像流
          CompressedStream.SaveToStream(SourceStream);
    //将原始图像流进行压缩,DestStream中是压缩后的图像流
          SourceStream.Free;
          CompressedStream.Clear;
    //写入原始图像的大小
          CompressedStream.WriteBuffer(Count, SizeOf(Count));
    //写入经过压缩的图像流
          CompressedStream.CopyFrom(DestStream, 0);
       finally
          DestStream.Free;
       end;
    end;
    /////////用流做参数来调用函数/////////////
         jpg.SaveToStream(BmpStream);
         CompressBitmap(BmpStream, clMax); //按照最大压缩比进行压缩
      

  8.   

    是在DLL调用中传递中,一般在DLL传递的是Pointer, Number, Record,其它的一般尽可能的用它们来代替。