VB6.0用掲示板の過去のログ(No.2)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [管理用]

投稿日: 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として呼び出す。
というような手順で近い形での実装が可能にはなります。


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- VBレスキュー(花ちゃん) - - Web Forum -