从 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 的相关文章

  • 如何从具有管理员权限的应用程序接收键盘输入到非管理员应用程序?

    我编写了一个应用程序 该应用程序具有覆盖类型的窗口 可以通过热键显示和隐藏该窗口 而另一个应用程序具有焦点 所述另一个应用程序是一个以管理员权限运行的 DirectX 游戏 我已经尝试了 3 种可能的解决方案 以便在其他应用程序中按下我的热
  • 使用普通画布/文本输出更新LayeredWindow

    有没有一种方法可以使用画布在表单上绘图 然后使用 updatelayeredwindow 这样表单就不可见 但文本可见 就像只显示文本的半透明表单一样 如果没有 那么有没有办法只用画布 opengl directx 制作某种半透明形式 我想
  • 如何以编程方式安排任务

    如何使用 delphi 7 像 Google updater 一样安排任务 我没有使用注册表 因为它被卡巴斯基防病毒软件检测为误报 我在注册表中作为启动项添加的任何内容都会被检测为特洛伊木马 因此我决定使用任务计划 下面的代码展示了如何删除
  • VCL.位图到 FMX.位图

    我在网上找到了这段代码 但 FMX Bitmap 没有扫描线 是否可以以某种方式将 VCL TBitmap 复制或绘制到 FMX Bitmap IFDEF MSWINDOWS type TBitmap FMX Types TBitmap T
  • 如何在 OSX 上的应用程序名称下创建子项菜单?

    如何在下面添加TMenuItemProject1以上Quit在下面的屏幕截图上 我创建了一个 TMenuBar 并选中了 UseOSMenu 属性 我添加的第一个 TMenuItem 是主栏中的第二个 TMenuItem 您可以通过将 II
  • Delphi TImageList 位图更改

    我正在使用 Delphi XE2 Update 3 Update 4 与我们的一些第 3 方组件不兼容 因此我们尚未更新 我在我的应用程序中使用 TImageList 我注意到很多时候当它从源视图切换到表单视图 F12 时 突然之前未修改的
  • 如何避免使用 WinApi.Windows 的 Delphi 应用程序中的 dll 劫持

    Delphi 最新版本使用各种系统 dll 的静态链接 例如 WinApi Windows 单元中的 version dll 这会导致在单元初始化之前加载 version dll 这会打开一个安全漏洞 可以通过将受感染的 version d
  • 我可以让我的 Delphi 应用程序在特定时间(例如上午 12:00)启动,而不运行应用程序吗?

    我看到一个已安装的应用程序 它从供应商的网站提供一些 XML 数据并将其显示在主窗体窗口中 我想这很简单 但我注意到 即使我关闭系统托盘中的应用程序 明天早上 上午 12 00 正好 它也会再次弹出 这太酷了 我不确定它是用 Delphi
  • 如何根据输入的内容过滤组合框的内容?

    我们有一个包含 100 多个项目的组合框 当我们在组合框中输入字符时 我们想要过滤掉项目 例如 如果我们输入 ac 并单击下拉选项 那么我们希望它仅显示以 ac 开头的项目 我怎样才能做到这一点 也许您会更喜欢使用操作系统内置的自动完成功能
  • 使用 OLE 和 Delphi 提高 Word 文档中搜索替换的性能

    经过一些实验 我最终得到了以下代码来在 MSWord 中执行搜索和替换 此代码在页眉和页脚中也能完美运行 包括首页或奇数 偶数页的页眉和 或页脚不同的情况 问题是我需要打电话MSWordSearchAndReplaceInAllDocume
  • 我如何在Delphi中处理事件?

    例如 我有一个程序 在单击 Button1 后执行某些操作 如果没有 Button1Click 中的代码 如何处理按钮的 onclick 事件 我需要为 Button1 动态添加事件 unit Unit1 interface uses Wi
  • 有人用CrossKylix进行真正的跨平台开发吗?

    新版本克罗斯凯利克斯 http crosskylix untergrund net 两周前更新过 即使 Kylix 已经停产很久了 但它似乎仍然被一些 Delphi 开发人员使用 有人在 Windows 和 Linux 的跨平台开发中成功使
  • 不断断点?如何去除它们?

    我下载了一个用Delphi 2009制作的项目 这也是我使用的 但是有一个断点我无法删除 如果我尝试删除它 它会在程序执行后再次执行 我在其他调试器中遇到了这样的事情 称为硬件断点 但这并不重要 如何删除断点 EDIT Article ht
  • 石和磅的格式正确吗?

    我有一个图表 用于显示重量 以英石和磅 lbs 为单位 该图表由记录中的数据填充 对于权重 数据类型为 Double 记录数据是在运行时编辑的 我需要知道一种正确格式化输入数据的方法 为了更好地理解 首先看一下这些示例值 它们表示为石和磅
  • 将数据从一个数据集结构移动到另一个数据集结构的更快方法(在 TDatasetProvider 中)

    我有一个自定义的 TDatasetProvider 它允许为其提供的任何数据创建新字段 因此 假设您在原始数据集上获得了以下字段 客户ID Name Age 您需要使用显示位图在 DBGrid 上选择它 好吧 你可以 因为我的 DSP 可以
  • 如何调试仅在应用程序关闭时发生的崩溃? (德尔福)

    因此 经过最近的一些更改 我们发现我们最古老的应用程序之一有时会在关闭时崩溃 这会以 运行时错误 216 消息的形式或来自 Windows 错误报告的消息的形式表明应用程序已停止工作 该应用程序已经发出OutputDebugString 每
  • 从创建 UI 的同一线程更新 VCL。为什么?

    我知道我必须调用 Synchronize 来从未创建控件或向窗口发送消息的线程更新 vcl 我经常听到 线程不安全 这个词 但我找不到关于正在发生的事情的实际解释 我知道应用程序可能会因访问冲突而崩溃 但我又不知道为什么 请阐明这个主题 V
  • 为什么 Delphi 变体不能保存对象?

    为什么 Delphi 变体不能保存对象 更重要的是 这种限制背后的原因是什么 你绝对可以storeVariant 变量中的对象 只需将其转换为 NativeUInt 无论如何 对象只是一个指针 obj TObject Create v Na
  • 任意通用列表的通配符

    我有一个类 MyClass 它不是通用的 包含任意 TList 并对其执行某些操作 我希望用通用 TList 替换 TList 但 MyClass 必须保持非通用 由于 Delphi 是不变的 这样的事情是行不通的 list1 TList
  • 在比较 Delphi 表单文件的版本时,如何使 Beyond Compare 忽略某些差异

    我使用Beyond Compare 版本3 1 10 来比较不同版本的Delphi Form Files 但我不想看到有关ExplicitTop ExplicitLeft ExplicitHeight 和ExplicitWidth 的差异

随机推荐

  • 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 我花了很多时间谷