1

さて、私はルビーを使っていくつかの良い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

他のメソッドも呼び出せません。実際、タイプライブラリメソッドを呼び出すことはできないようです。

私は何が間違っているのですか?

4

1 に答える 1

2

100%確信はありませんが、WIN32OLE_TYPEは情報を抽出するためだけのものである可能性があります。WIN32OLEオブジェクトだけを使用してみてください。ただし、たとえばサーバー名を知っている必要があります(サーバー名を推測しています)。

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

そして、次のいずれかを直接呼び出すことができるはずです。

c.AddAllSystemLanguages(3, true)

または、WIN32OLEでinvokeメソッドを使用します。

c.invoke("AddAllSystemLanguages", 3, true)
于 2010-03-11T16:41:01.440 に答える