[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]

[MD:4307] COM support plan



大場です。

40度の泡盛が脳味噌を蝕んでいく中、何度も何度も脱線してついに最後まで聞
くことができなかったり、神懸かりトランス状態になった himi さんが突然粘
土板に古代バビロニア文字で仕様を書きはじめたり、その碑文を発掘した三好
さんといっしょに困惑してますます泡盛あおってみたり、林主席研究員に解読
を要請するもサジを投げられたりと、はなはだ不完全ですがせっかく面白い話
が聞けたのでまとめてみます。補完よろしくお願いします。


1.Meadow Win32 COM support

Meadow における COM support とは、elisp から COM Object を操作可能にする
ことである。

Ruby の Win32OLE 拡張ライブリ、Perl の OLE 拡張モジュール、Python の COM
拡張モジュール、そして VBScript などで実現されていることとほぼ同じ事を
Meadow 上で可能にする試みである。

2.Architecture

C level で COM Object は Lisp Object と等価になるよう実装することが求め
られる。elisp から COM Object を見ると Lisp Object とまったく同じように
扱えるようにする必要がある。それには以下をサポートしなくてはならない。

  (1) ライフサイクル管理 (もちろん GC とかも)
  (2) COM の型と Lisp の型の完全な相互変換
  (3) ...

# ここ同期とか排他とか 3 つ以上ポイントがあったと思うのだけど、酩酊し
# てダメ...

elisp level では COM Object の property や method をいわゆる Object と
して簡易に扱えるように luna の wrapper を用意してもよい。wrapper によっ
てユーザーは、COM Object を luna object であるかのように利用することが
可能になる。

# 阿部さんから eieio の wrapper も用意してはどうかという提案アリ。

Meadow ではリリースパッケージに COM wrapper を追加した luna を含めて
luna enabled として配布することも考えられる。


3.参考

Ruby Win32OLE source code
<http://homepage1.nifty.com/markey/ruby/win32ole/win32ole-0.5.2.zip>

Ruby Win32OLE 製作過程の雑記
<http://homepage1.nifty.com/markey/ruby/win32ole/>

Perl libwin32 source code
<http://mirrors.midco.net/pub/CPAN/ports/win32/Standard/x86/libwin32-0.191.tar.gz>

Perl libwin32 documentation
<http://search.cpan.org/author/GSAR/libwin32-0.191/>
<http://theoryx5.uwinnipeg.ca/CPAN/data/libwin32/index.html>
<http://theoryx5.uwinnipeg.ca/CPAN/data/libwin32/OLE/Win32/OLE.html>

Python and COM 
<http://www.python.org/windows/win32com/>

Python win32com source code
<http://www.python.org/windows/win32com/win32com_src.zip>

洗練されたPerl: PerlによるExcelファイルの読み取り/書き込み (dW)
<http://www-6.ibm.com/jp/developerworks/linux/011130/j_l-pexcel.html>

FLIM - luna
<http://www.kanji.zinbun.kyoto-u.ac.jp/~tomo/elisp/FLIM/>

emacs-w3m shimbun ライブラリについて 
<http://www.nijino.com/ari/emacs/shimbun.html>

eieio
<http://cedet.sourceforge.net/eieio.shtml>

--
koichiro <koichiro@xxxxxxxxxxx>