Конференция "Corba" » OleContainer+загрузка из потока
 
  • em240 © (14.12.07 13:49) [0]
    const Signature:integer=-525465623;

    frmOleContainer.OleContainer1.DestroyObject;
    Stream:=nil;
    try
    Stream:=TMemoryStream.Create;
    TBlobField( Query.FieldByName( 'Body' ) ).SaveToStream(Stream);
       Stream.Seek(0,soFromBeginning);
       if Stream.Size>4 then begin
           Stream.Read(N,SizeOf(N));
           if N=Signature then frmOleContainer.OleContainer1.LoadFromStream(Stream);
       end;
       frmOleContainer.OleContainer1.Modified:=false;
    finally
     Stream.Free;
     end

    пример был взят из книги Delphi,COM,Тенцера.
    Когда убираю if N=Signature then (они не равны), то пишет Invalid stream name
  • Сергей М. © (14.12.07 14:10) [1]

    > они не равны


    И что же ты хочешь ?
    Отсутствие сигнатуры есть признок несоответствия данных ожидаемому формату
  • em240 © (14.12.07 15:13) [2]
    Я поменял сигнатуру.
    При попытке загрузки файла из потока ошиба "Invalid stream name"
  • Сергей М. © (14.12.07 16:51) [3]

    > em240 ©   (14.12.07 15:13) [2]
    >
    > Я поменял сигнатуру.


    С какого перепугу ?)
  • ага (15.12.07 13:27) [4]
    Чет я сомневаюсь, что в упомянутой книге такая фигня написана. Во-первых, Stream.Read(N,SizeOf(N)) выкинь к лешему, контейнер сам сигнатуру проверит. Во-вторых, Stream.Position:= 0 Иван Федорыч Крузенштерн будет делать?
  • ага (15.12.07 13:28) [5]

    > Во-вторых, Stream.Position:= 0 Иван Федорыч Крузенштерн
    > будет делать?

    Забыл дописать "если уж сам читаешь сигнатуру"
 
Конференция "Corba" » OleContainer+загрузка из потока
Есть новые Нет новых   [120350   +22][b:0][p:0]