好的,所以我正在用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
我也不能调用任何其他方法。事实上,我似乎无法调用任何类型库方法。
我做错了什么?
答案 0 :(得分:1)
我不是100%肯定,但WIN32OLE_TYPE可能只是用于提取信息。尝试仅使用WIN32OLE对象。例如,您需要知道服务器名称(我猜服务器名称):
c = WIN32OLE.new('Trados.LangCombo')
然后你应该能够直接调用:
c.AddAllSystemLanguages(3, true)
或者在WIN32OLE上使用invoke方法:
c.invoke("AddAllSystemLanguages", 3, true)