代码之家  ›  专栏  ›  技术社区  ›  KTamas

Ruby和win32ole:无法调用win32ole_类型方法(类型库)

  •  0
  • KTamas  · 技术社区  · 16 年前

    好吧,所以我正在用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 controls type library”)。我也知道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
    

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

    我做错什么了?

    1 回复  |  直到 16 年前
        1
  •  1
  •   Bob    16 年前

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

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

    然后您应该能够直接调用:

    c.AddAllSystemLanguages(3, true)
    

    或者在win32ole上使用invoke方法:

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