[#36686] 1.1 < 61.1 - 60.0 — Shin-ichiro HARA <sinara@...>

原です。

19 messages 2002/12/06

[#36770] www.ruby-lang.orgリニューアル準備のお知らせ — TADA Tadashi <sho@...>

ruby-lang.orgのwebmasterチームでは、タイムリーな情報提供と使いやすい

11 messages 2002/12/16

[ruby-list:36745] Re: WIN32OLEでの定数読み込み

From: arton <artonx@...>
Date: 2002-12-12 15:01:07 UTC
List: ruby-list #36745
artonです。こんにちは。

On Thu, 12 Dec 2002 17:20:47 +0900
Takashi & Kayoko Sano <tksano@m3.kcn.ne.jp>さん wrote:

> 問題:
> 私の環境でWIN32OLEを使ってWordの定数を読み込むと、次のような
> 警告がずらずらと出ます。これは重複して読み込んだ時だけでなく、
> 最初に読み込んだ際も出ます。
> warning: already initialized constant Emptyenum
--snip-- 
> これが出てくるのがちょっと気になりまして、何が原因か知りたい
> と思いまして質問させていただきました。
Win32OLEの定数取り出しメソッドは、OLEのタイプ情報を元にしているのですが、
Wordの場合、
    typedef enum {
        emptyenum = 0
    } WdBorderTypeHID;
...
    typedef enum {
        emptyenum = 0
    } WdCharacterCaseHID;
というような、定数の拡張用に用意したと思われるダミーのenumが多数含まれて
いるのが理由です。
Win32OLEは、タイプ情報から読み取った値を単純にキャピタライズして定義して
いくため、この場合、Emptyenumが複数回定義され、その結果、問題の警告が出
力されます。
解消方法は、enum名をモジュール名として、取り込みを行ったモジュール内に
ネストしたモジュール*)を作成することだと思うのですが、使う場合に煩雑にな
りそうなので、個人的には現在のままでいいと思います。(助田さんがどう考え
られているかはわかりませんが)

*)たとえばWordモジュール内にロードした場合に、さらに内部で
WdBorderTypeHIDモジュールを作成して、その中にEmptyenumを定義するというこ
と

あと、Wordを操作するスクリプトが複数あるのなら、
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/24042の新井さ
んのスクリプトを利用して1度ファイルにしてそれを再利用するようにすると良い
と思います。
注)9行目は
word = WIN32OLE.new('Word.Application')
WIN32OLE.const_load(word, WIN32OLE::Constants)
と直してください。

-- 
arton <artonx@yahoo.co.jp>

__________________________________________________
Do You Yahoo!?
Yahoo! BB is Broadband by Yahoo!  http://bb.yahoo.co.jp/


In This Thread