Попробуйте это
instream := IUnknown(req.ResponseStream) as IStream;
Редактировать 1 Вы не должны вызывать FreeAndNil для интерфейса.FreeAndNil может быть передан только экземпляр объекта.Невыполнение этого условия приводит к исключению.Так как интерфейсы в любом случае считаются ссылками, вы можете просто позволить им выйти из области видимости, и они будут очищены.Итак, вам нужно удалить:
FreeAndNil(instream);
FreeAndNil(req);
Edit2: попытка объяснить, что происходит
Пожалуйста, не стесняйтесь редактировать или дополнять, если вы думаете, что этоне точен или, если это можно объяснить лучше.
req.ResponseStream
- это OleVariant
.Ключевое слово as
выполняет вызов QueryInterface
, и оно не реализовано OleVariant
.
OleVariant
имеет встроенное преобразование типов из OleVariant
в IUnknown
, поэтому вам нужносначала приведите OleVariant
к IUnknown
, а затем используйте оператор as
, чтобы сделать QueryInterface
, чтобы получить интерфейс IStream
.
Вы не можете привести OleVariant
непосредственно кIStream
, потому что нет встроенного преобразования типов из OleVariant
в IStream
.