-
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
-
> они не равны
И что же ты хочешь ? Отсутствие сигнатуры есть признок несоответствия данных ожидаемому формату
-
Я поменял сигнатуру. При попытке загрузки файла из потока ошиба "Invalid stream name"
-
> em240 © (14.12.07 15:13) [2] > > Я поменял сигнатуру.
С какого перепугу ?)
-
Чет я сомневаюсь, что в упомянутой книге такая фигня написана. Во-первых, Stream.Read(N,SizeOf(N)) выкинь к лешему, контейнер сам сигнатуру проверит. Во-вторых, Stream.Position:= 0 Иван Федорыч Крузенштерн будет делать?
-
> Во-вторых, Stream.Position:= 0 Иван Федорыч Крузенштерн > будет делать?
Забыл дописать "если уж сам читаешь сигнатуру"
|