【问题标题】:ruby query interface not working?红宝石查询界面不起作用?
【发布时间】:2014-01-05 03:20:50
【问题描述】:

我在使用 WIN32OLE#ole_query_interface 函数时遇到问题。

我使用相同的源代码,如doc of the function

ie = WIN32OLE.new('InternetExplorer.Application')
ie_web_app = ie.ole_query_interface('{0002DF05-0000-0000-C000-000000000046}')

puts "ie_web_app: = #{ie_web_app.ole_type}"

输出是:

# => ie_web_app: = IWebBrowser2

但我希望输出是 IWebBrowserApp。我错过了什么?

顺便说一句:我正在开发 64 位 Win7,我现在使用 2 个解释器进行测试:

  • 红宝石 2.0.0 p353 (2013-11-22) [x64-mingw32]
  • 红宝石 1.9.3 p484 (2013-11-22) [i386-mingw32]

这是来自 tlb 的 coclass 供参考:

  uuid(0002DF01-0000-0000-C000-000000000046),   helpstring("Internet Explorer Application.") ] coclass InternetExplorer {
    [default] interface IWebBrowser2;
    interface IWebBrowserApp;
    [default, source] dispinterface DWebBrowserEvents2;
    [source] dispinterface DWebBrowserEvents; };

以及IWebBrowserApp的相关部分:

[
  uuid(0002DF05-0000-0000-C000-000000000046),
  helpstring("Web Browser Application Interface."),
  hidden,
  dual
]
dispinterface IWebBrowserApp {

【问题讨论】:

  • 我不知道 Ruby,puts 的第一部分及其结果对我来说是可疑的。确定是同一条puts 行吗?
  • @Medinoc 谢谢 - 我现在已经纠正了这个问题(我不小心从测试中复制了错误的行) - 但输出类型仍然相同。

标签: ruby com ole


【解决方案1】:

coclass 说它实现了IWebBrowser2 作为它的默认 接口。我怀疑 ruby​​ 的 .ole_type 方法正在使用它来生成可打印的名称。你能在结果接口上调用IWebBrowserApp 方法吗?如果是这样,无论打印什么,它都是IWebBrowserApp

【讨论】:

  • 好吧,因为IWebBrowser2 派生自IWebBrowserApp,这不会给我任何新信息。好吧,也许问题在于IWebBrowserApp 被标记为hidden,因此Ruby 会退回到默认界面?但我真正的用例涉及更多,在这种情况下,另一个接口没有隐藏或派生 - 它仍然不起作用。
  • 等等,IWebBrowser2继承了IWebBrowserApp? (检查)好的,好吧,那就是的解释。当一个对象同时实现一个接口和它的基接口时,它通常为两者返回相同的指针。它将它们视为相同的接口,并在您请求基本接口时仅转换指针。
  • @MartinTrummer - 那么真正的界面是什么?
  • 好吧,真正的用例与此并不完全相关,因此应该是一个可以理解的小例子本身的问题。但由于现在决定放弃 Ruby 并使用另一种具有更好 COM 支持的语言,所以我不会投入这项工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-31
  • 1970-01-01
相关资源
最近更新 更多