【问题标题】:Ruby and WIN32OLE: Cannot call WIN32OLE_TYPE methods (Type Libraries)Ruby 和 WIN32OLE:无法调用 WIN32OLE_TYPE 方法(类型库)
【发布时间】:2011-01-22 16:10:58
【问题描述】:

好的,所以我正在使用 ruby​​ 进行一些很好的 OLE'(抱歉)自动化,但遇到了一个奇怪的问题。我正在尝试从类型库中提取一些数据。这在 VB 中有效:

Dim c As New TControlsLib.LangCombo
Dim l As TControlsLib.Language
Dim converter As New TControlsLib.LcidConverter
c.AddAllSystemLanguages mtAllKnownLanguages, True
For Each l In c.Languages
  Debug.Print l.DisplayName & ";" & converter.IsoAbbreviationFromLcid(l.Lcid)
Next

TControlsLib 是类型库(全称:“TRADOS 控件类型库”)。我也知道 mtAllKnownLanguages 是一个等于 3 的常数。

所以,我尝试在 Ruby 中做同样的事情。这是我的 IRB 会话:

irb(main):001:0> require 'win32ole'
=> true
irb(main):002:0> t = "TRADOS Controls Type Library"
=> "TRADOS Controls Type Library"
irb(main):003:0> c = WIN32OLE_TYPE.new(t, "LangCombo")
=> LangCombo
irb(main):004:0> converter = WIN32OLE_TYPE.new(t, "LcidConverter")
=> LcidConverter
irb(main):005:0> c.ole_methods
=> [QueryInterface, AddRef, Release, GetTypeInfoCount, GetTypeInfo, 
GetIDsOfNames, Invoke, Enabled, Enabled, Languages, Refresh, AddSystemLanguage, 
SelectedItem, SelectedItem, SelectLanguage, Clear, AddAllSystemLanguages, 
DroppedDownHeight, DroppedDownHeight, AddCustomLanguage, AddLanguage, Type, 
Type, RemoveLanguage, OnSelectionChanged]
irb(main):006:0> c.AddAllSystemLanguages(3, true)
NoMethodError: undefined method `AddAllSystemLanguages' for LangCombo:WIN32OLE_TYPE
from (irb):6

我也不能调用任何其他方法。事实上,我似乎无法调用任何类型库方法。

我做错了什么?

【问题讨论】:

    标签: ruby automation win32ole typelib


    【解决方案1】:

    我不能 100% 确定,但 WIN32OLE_TYPE 可能仅用于提取信息。尝试仅使用 WIN32OLE 对象。例如,您需要知道服务器名称(我猜是服务器名称):

    c = WIN32OLE.new('Trados.LangCombo')
    

    然后你应该可以直接调用:

    c.AddAllSystemLanguages(3, true)
    

    或者在WIN32OLE上使用invoke方法:

    c.invoke("AddAllSystemLanguages", 3, true)
    

    【讨论】:

    • 谢谢!我找到了类型库的 GUID,它的作用是 c = WIN32OLE.new('{LONGGUID}')
    • 通过 OLE 浏览器,我还找到了正确的服务器名称,这也可以。
    猜你喜欢
    • 2010-10-10
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多