从 OleVariant 获取 IStream

2023-12-11

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

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 applicable to this operand type(第 45 行是instream := req.ResponseStream as IStream;).

如何将 IStream 吓出 OleVariant?


Try this

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

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

  FreeAndNil(instream);
  FreeAndNil(req);

Edit2:尝试解释发生了什么

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

req.ResponseStream is an OleVariant. The as关键字正在调用QueryInterface这不是由OleVariant.

OleVariant有一个内置的类型转换OleVariant to IUnknown所以你需要先投射OleVariant to IUnknown然后使用as操作员做一个QueryInterface为了得到IStream界面。

你不能施放OleVariant直接到一个IStream因为没有内置的类型转换OleVariant to IStream.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 OleVariant 获取 IStream 的相关文章

  • 从delphi应用程序调用.net4.0 com服务器后出现错误异常

    我们正在将代码库从 BDS2006 迁移到 Rad Studio XE 我们发现了一些非常奇怪的行为 如果我们在从 Net4 0 中实现的 COM 服务器创建一些对象后进行无效的浮点运算 即除以零 我们不会没有得到正常异常 即 EDivis
  • 以 png 格式剪辑幻灯片 (Delphi 2010)

    I have a filmstrip of images in png format like this 我想知道如何剪辑每个图像并将这些图像放入 TImageList 控件中 并始终保留透明度 EDIT 是的 在设计时 RRUZ 提到的技
  • 我需要避免尝试更新连接到 TSQLQuery 的 Delphi TClientDataset 中的非物理字段

    概要 我的代码正在尝试更新 Delphi XE 中的非物理字段TClientDataset 连接到TSQLQuery以其SQL属性集 作为运行时的结果创建Open命令 我有一个TClientDataset连接到一个TDatasetProvi
  • 如何释放 TInterfacedObject 中的 TObject 成员

    我知道接口对象是引用计数的 因此不需要手动释放它 但如果它有一个 TObject 继承成员 我是否应该在析构函数中手动释放该成员 考虑以下代码 program Project2 APPTYPE CONSOLE R res uses Syst
  • 如何使用 Gmail 的 SMTP 和 Indy 10 发送电子邮件?

    我正在使用 Delphi 2009 和 svn 中最新的 Indy 10 通过 SMTP 发送电子邮件 但它不适用于 Gmail Google Apps 托管域 当我尝试发送电子邮件时 我收到 必须首先发出 STARTTLS 命令 我尝试用
  • Delphi应用程序窗口z顺序和MainFormOnTaskBar属性

    我正在维护一个最初用 Delphi 7 编写并移植到 Delphi XE 的应用程序 使用 Windows 7 我们遇到了一些问题 例如模态窗口出现在主窗口下方 以及最终无法与程序交互 因为用户需要与模态窗体交互 而这是不可能的 因为它位于
  • 对象的引用计数

    在我的代码中 我使用一个小的数据存储类 它是在不同的地方创建的 为了避免内存泄漏并简化事情 我想使用引用计数 所以我这样做了 type TFileInfo class TInterfacedObject IInterface 并删除了我对
  • 如何使 StringGrid 的列适合网格的宽度?

    我已经寻找解决方案很长时间了 但没有任何运气 有谁知道一个简单的方法来做到这一点 例如 我想拉伸网格的第二列以适应网格的宽度 Use the ColWidths财产 像这样 with StringGrid1 do ColWidths 1 C
  • 与 OLE 服务器或 ActiveX 控件通信

    MS Access 2010 Win 7 常规形式我没有故意放置任何 ActiveX 或 OLE 东西 甚至不确定它们是什么 但无论如何 每当我在特定形式的代码中放入某些内容时 它都会说 您作为事件属性设置输入的表达式 XXXXX 产生了以
  • 在 Delphi 或 C++ Builder 中使用 Chromium Edge WebView2 [重复]

    这个问题在这里已经有答案了 既然 Microsoft Chromium Edge 已经最终确定 是否可以在 Delphi 或 C Builder 中使用它 据我了解 它是基于WebView2成分 是否有一个组件 例如TWebView2或者E
  • 从 Delphi VCL 样式获取特定字形

    我想从 VCL 样式获取特定的位图 并将其设置为按钮上的图像 它实际上是帮助问号 在位图样式编辑器中是来自表单的 btnHelp 图像 要从 VCL 样式获取视觉元素 字形 您必须使用GetElementDetails和TCustomSty
  • 阻止 IDE 自动添加使用单位

    我正在将 Lazarus 项目转移到德尔福西雅图 Lazarus 项目依赖于 40 多个单元 包括控件 并具有多种应用程序 在所有项目的使用条款中 他们使用了以下内容 uses Classes SysUtils Forms Controls
  • CharInSet 不适用于非英文字母?

    我已经将应用程序从 Delphi 2007 更新到 Delphi 2010 一切都很顺利 除了一条编译正常但不起作用的语句 If Edit1 Text 1 in S then ShowMessage Found else ShowMessa
  • 在新实例中打开 SAS 程序

    我正在尝试找出一种在单击时默认在增强编辑器的新实例中打开 SAS 程序的方法 问题是asked https stackoverflow com questions 4654876 open sas program in new window
  • 使用 PutBlock 并将字节数组全部设置为零的 EIPHTTPProtocolExceptionPeer 异常

    使用 Delphi XE2 Update 3 我在将零字节块上传到 Azure 时遇到问题 当我说零字节时 我指的是每个元素设置为零的字节数组 不是零长度 例如 var ConInfo TAzureConnectionInfo RespIn
  • Delphi 中表单分发与其生命周期相关的接口对象的安全方法?

    我有一个 Delphi 表单 它提供接口对象背后的功能 代码的其他部分也通过属于该表单的属性获取引用 我无法将接口功能委托给子对象 因为太多的功能是由表单上的控件 组件提供的 我无法使用 TAggregateObject 或 TContai
  • 在 Delphi 中淡入 alpha 混合 PNG 表单

    几年前 当 Vista 首次发布时 我曾提出过这个问题 但始终没有解决这个问题 并把它搁置起来 留待以后再考虑 我有一个启动屏幕 我花了很大力气让它看起来很棒 这是 32bpp alpha 混合的 PNG 我有一些代码 如果需要 我可以挖掘
  • Delphi - Indy - 保存 GMail 草稿

    我一直在 Delphi 下使用 Indy 通过 gmail 帐户发送消息 使用 TIdSMTP 和 TIdMessage 组件 这绝对没问题 但是 我的客户请求将消息保存到 DRAFTS 文件夹 以便他在实际发送消息之前对 以编程方式创建的
  • 如何在拥有句柄时检查给定进程是否正在运行

    我在用ShellExecuteEx启动应用程序 成功开始阅读后TShellExecuteInfo hProcess获取已启动进程的句柄 我想定期检查我的应用程序启动的进程是否仍在运行 两个或多个同名进程可以同时运行 我想确保我的应用程序正在
  • 任何第三方都可以从我的项目加载嵌入式资源吗?

    请参考我的一篇之前的问题 https stackoverflow com questions 14681364 issues passing data from dll to application 我问的是如何从 DLL 加载已编译的资源

随机推荐

  • Rails find_or_create_by 多个属性?

    active record 中有一个方便的动态属性 称为 find or create by Model find or create by
  • jQuery-UI 在没有 CSS 或自定义的情况下无法在我的用户脚本中工作?

    我只想在我正在制作的用户脚本中使用 jQuery UI 菜单 的一小部分 jQuery UI 提供自定义下载 但我找不到任何指向特定模块的链接 我可以 require在脚本中 有人托管各个模块吗 另外 我尝试过只要求code jquery
  • 调整UIImagePickerController视频采集界面大小

    我在用splitviewcontroller对于我的 iPad 应用程序 我需要在其中捕获视频detailViewController尺寸为 530 px 宽 360 px 高 我尝试使用UIImagePickerController用于捕
  • 列出目录中的文件并将结果打印为 JSON

    抱歉 如果我的问题很基本 因为我不熟悉 php 和 json 我创建了一个 php 文件 其中列出了我的服务器上的目录 并且应该将结果打印为 JSON 那么 我该怎么做呢 这是我列出目录中文件的代码
  • 如何使用WCF将大文件从客户端发送到服务器?

    如何在 C 中使用 WCF 将大文件从客户端发送到服务器 下面是配置代码
  • 创建具有抗锯齿功能的圆或圆盘以用于视网膜显示

    我已经使用创建了一个圆圈CGContextFillEllipseInRect from CoreGraphic 我正在使用这个圆圈 实际上是一个磁盘 来替换thumbImage of an UISlider 默认情况下应用抗锯齿 但我的 i
  • ASP.NET 网页使用 html 扩展

    我正在尝试使用ASP NET 网页理解使用静态 html 文件 大约 500 个 的现有站点 不幸的是 我的 SEO 人员要求网站维护其现有的目录 文件名 因此我需要使用 html 找到后这个例子 我尝试添加扩展名web config un
  • Windows Phone 获取服务器源代码

    我正在尝试获取网站的源代码 在 Windows 应用程序中 一个简单的 http 请求就足够了 然而在 Windows Phone 中 情况要复杂得多 我在谷歌上搜索了很多 但没有得到明确的答案 这是我尝试过的 但没有取得很大成功 publ
  • 使用“cat”将非英语字符写入.html文件(在R中)

    这是显示问题的代码 myPath getwd cat abcd append T file paste myPath temp1 html sep This is fine cat br br br append T file paste
  • python 如何检查当前时间是否在范围内?

    我需要检查当前时间是否在时间范围内 最简单的情况 time end gt time start if time 6 0 lt now time lt time 12 00 print 1 但是 当用户输入结束时间小于开始时间的时间范围时 就
  • 无法将 datagridview 的行可见设置为 false

    我有一个DataGridView我设置的地方DataSource taskerEntities te new taskerEntities var OMsMasterDescriptiveIndicators te MyTable Sele
  • LINQ - 获取所有父母的所有子记录

    我有两个模型 class Foo public List
  • Python 在循环内从 Csv 创建 XML

    我正在尝试从 csv 创建 xml 文件 CSV CatOne CatTwo CatThree ProdOne ProdTwo ProdThree ProductOne ProductTwo ProductThree 所需的 XML
  • 方案中模 m 的乘法逆元

    我已经编写了模 m 的乘法逆元的代码 它适用于大多数初始情况 但不适用于某些情况 代码如下 define inverse x m let loop x modulo x m a 1 cond zero x f x 1 a else let
  • Karate 支持 Neo4j 数据库吗?

    想知道是否空手道支持 Neo4j 数据库 如果是的话 希望有一个前任 功能会很有帮助 Karate 支持任何Java代码这样你就可以间接地做任何你想做的事情 请看一下这个 JDBC 示例 它将帮助您入门 dogs feature 您将需要编
  • 如何根据用户输入的高度和宽度打印字符串

    我确信这是一个简单的问题 但我的教授在解释事情方面很糟糕 因为我是计算机科学的新手 所以我需要帮助 任务是创建一个函数 根据用户选择的高度和宽度以不同的格式打印 返回用户给出的字符串 例如 如果用户字符串是 lt vvv 相同功能的另一个例
  • VBA - 在子程序中调用 Dir() 时使用 Dir() 循环

    我正在使用以下命令循环访问文件夹 Dim file As Variant file Dir myFolder While file lt gt mySub file lt this sub use Dir hundreds of times
  • 仅为我的公司页面创建 Facebook 标签

    我已经创建了一个公司页面 并想要创建一个只能安装在我的页面上的自定义选项卡 我知道如何创建应用程序并安装自定义选项卡 如何设置该应用程序以便只有我可以安装它 谢谢 对应用程序的 页面选项卡 URL 通过页面选项卡加载应用程序时使用的 URL
  • Tabhost 中的 ProgressDialog 不工作

    我在我的活动中使用三个进度对话框 OnCreate 当导航到下一页时 当导航到上一页时 但是当我第一次单击下一页按钮时 应用程序因错误而崩溃WINDOW LEAKED 这是我的代码 请有人告诉我做错了什么 public class Requ
  • 从 OleVariant 获取 IStream

    我正在使用 Delphi 和 WinHTTP 来执行 HTTP 请求以从 Internet 下载一些文件 并且我可以执行该请求 但我不知道如何从返回的 OleVariant 获取 IStreamResponseStream 我花了很多时间谷