From: Sadayuki Sakamoto Date: 1997-05-01T20:38:00+09:00 Subject: [ruby-list:2892] Re: how to init class? 酒本です。 >前田です。 > >On Wed, 30 Apr 97 09:40:15 JST, >Sadayuki Sakamoto wrote: > >|(1) 任意のDLL中のAPIをコールする拡張モジュールを作った。 >|  あとは全てruby でクラスを作ろうと考えました。 > >うわ、すごいですね。 >引数の変換とかはどうされたんでしょう? 手元にソースがないので正確ではないのですが、 渡したい値などを配列にし、ruby で pack してそれを渡しています。 渡す文字列や、渡される文字列の領域等もそのものをいっしょにpackし、 パックされた内容を示すテンプレート文字列を別の引数で渡してます。 "LLLS16" (32ビット整数が3個に16バイトの領域) とかです。 わたしは、DLLクラスにしてしまったので確か、 DLL.call(関数名、テンプレート文字列、packされたブロック) とやって、内部で引数配列に分解してます。渡されたブロック を上書き用に複製した後、分解時に分かる 引数の数(0〜16)で冗長に分岐してAPIをcallしてます。 あとは複製されたブロックを返しています。 結構なオーバヘッドでよすね。考えれみれば。 >main()はそのままで > > hinst = GetModuleHandle(NULL); > >とかしてhinstを拾ってこようかと思っています。 > >あとはTk.main_loopみたいなのを用意して > > while (GetMessage(&msg, > NULL, > 0, > 0)) > { > TranslateMessage(&msg); > DispatchMessage(&msg); > } > >とかすればいいかなーと安直に考えているのですが... そういう方法があるのですね。 -- 酒本定幸 KDD 交換サービス技術部 03-3347-7429 sakamoto@tsc.sjk.kdd.co.jp