[ruby-list:2892] Re: how to init class?

From: Sadayuki Sakamoto<sakamoto@...>
Date: 1997-05-01 11:38:00 UTC
List: ruby-list #2892
酒本です。

>前田です。
>
>On Wed, 30 Apr 97 09:40:15 JST,
>Sadayuki Sakamoto <sakamoto@tsc.sjk.kdd.co.jp> 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

In This Thread