投稿日 | : 2005/07/23(Sat) 11:11 |
投稿者 | : K.J.K. |
Eメール | : akiya@koalanet.ne.jp |
URL | : |
タイトル | : Re: 関数をテーブル化し呼出し |
まず、現在のVBには、アドレスで指定された関数を呼び出す機能が
ありませんので、それをそのまま移植するのは無理があります。
関数テーブルを用意しなければならない、もしくはそうしないと
面倒な処理であるのかどうかを考えて、
A,その部分だけCなどでDLLとして作る。
B,アルゴリズムそのものを見直し、VBで実現可能なものにする。
のどちらかにするのが無難かと思われます。
で、まぁそれだけでは何なので、CallByNameだとIDispatchベースなの
で、それではなくより近いと思われる方法を提示してみます。
アドレスで指定された関数そのものは呼び出せませんが、関数テーブル
を持つInstancedなオブジェクトのメソッドならば、呼び出すことが
できます。それを利用して、
1,最初に呼び出しの基本の型となるメソッド(MethodA)を持つ
クラス(ClassA)を作る。
2,次に上記のClassAをImplementsしたClassB,C...を作る。
そのMethodAの実装は、それぞれ独自の処理にする。
3,ClassAの2次元配列を作り、そこにClassAではなく、Setステートメント
でNewしたClassB,C...を代入していく。
4,関数を呼び出すときは、全てClassA.MethodAとして呼び出す。
というような手順で近い形での実装が可能にはなります。