gpt4 book ai didi

delphi - 从 OleVariant 获取 IStream

转载 作者:行者123 更新时间:2023-12-03 15:44:03 26 4
gpt4 key购买 nike

我正在使用 Delphi 和 WinHTTP 执行 HTTP 请求以从互联网下载一些文件,我可以执行该请求,但我不知道如何从 返回的 OleVariant 获取 IStream响应流。我花了很多时间谷歌搜索,但我不知道该怎么做。这是我尝试过的:

var
req: IWinHTTPRequest;
instream: IStream;
begin
req := CoWinHTTPRequest.Create;

req.Open('GET', 'http://google.com', false);
req.Send('');

if req.Status <> 200 then
begin
ShowMessage('failure'#10 + req.StatusText);

FreeAndNil(req);

Application.Terminate;
end;

instream := req.ResponseStream as IStream;

ShowMessage('success');

FreeAndNil(instream);
FreeAndNil(req);

end;

但是我收到错误[DCC Error] main.pas(45): E2015 Operator not unavailable for this operand type(第45行是instream := req.ResponseStream as IStream; )。

如何从 OleVariant 中吓退 IStream?

最佳答案

试试这个

instream := IUnknown(req.ResponseStream) as IStream;

编辑 1您不得在接口(interface)上调用 FreeAndNil。 FreeAndNil 只能传递一个对象实例。如果不这样做会导致异常。由于接口(interface)无论如何都是引用计数的,因此您可以简单地让它们超出范围,然后它们就会被清理。因此,您需要删除:

  FreeAndNil(instream);
FreeAndNil(req);

编辑2:尝试解释发生了什么

如果您认为此内容不准确或可以更好地解释,请随时编辑或补充。

req.ResponseStreamOleVariantas关键字正在调用 QueryInterface OleVariant 没有实现这一点.

OleVariant具有来自 OleVariant 的内置类型转换至IUnknown所以你需要首先转换 OleVariantIUnknown然后使用as运算符(operator)做 QueryInterface为了得到IStream界面。

您无法转换 OleVariant直接发送至IStream因为没有从 OleVariant 进行内置类型转换至IStream .

关于delphi - 从 OleVariant 获取 IStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4938601/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com