日曜の活動報告

某上司がSqueakでOLEが使えるようになると面白いかもしれない、
と仰っていたので、今日は朝からそれをやってみております。


1:
とりあえずCoInitializeとかを呼ぶプリミティブを書いてみる。
なんかCoInitialize@4が見当たらんぞと、dllwrapが文句を言う。
かなり悩んだ末に、dllwrapのバージョンの問題であることが分かる。
引数の順番がシンボルの検索に影響を与えてしまうようだ。
Win32のSqueakの推奨?ビルド環境を無視している私が悪いのか、
それとも付属のMakefile.mingwを書いた人が悪いのか、
或いはMakefileのデフォルトのマクロを書いた人が悪いのか、
なんかよく分からないけど、原因が分かったのでよしとしよう。


2:
取得したインターフェイスポインターをどうやってSqueakに渡してやるか考える。
出来れば外部アドレスをハンドルするスーパークラスを作って、それを返してやりたいのだが、
プリミティブの中で任意クラスのインスタンスを作る方法が分からない。
ObjectMemoy辺りを弄くればいいのか、とか思ってやってみたら、
ソースを吐き出す時に何か得体の知れない「再構築」が始まってしまったので、
とりあえず妥協してByteArrayを使うことした。


3:
何となく英語版のイメージで作用をしていたわけだが、
OLEがワイド文字を使っているので、
実は多言語版Squeakを使うのが良いのではと思いつつも、
とりあえず英語版で作業を続ける。


4.
そもそもCOMはC++のテクニックなわけだから?
本当はC++を使いたいわけだが、
C++でプリミティブを書く方法が分からないので、
とりあえずCで書いている。
と言っても、今のところは発狂しそうになるのを堪えつつ、
SLANGとやらを使っているわけです。
尤も、cCode:を連発するのであれば、
無理にSqueakで書く必要など無いのかもしれない。
で、今はIUnknown::Releaseを作って試したら、
クラッシュしたので、この文章を書いて休憩しているという状況である。


毎回ながら、このプログラムも結局完成しないのは目に見えているし、
仮に完成してもどこにも発表しないだろう。
そういう無駄な活動をすることが、最近の私の休日。