アプリ版:「スタンプのみでお礼する」機能のリリースについて

Visual Basic 2005におきまして
変数に文字列で指定したコード(関数)を実行する方法を探しております。

たとえば、下記のコードで、変数funcStringで指定した関数を実行して戻り値を得たいと思っております。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim funcString As String = "testFunc(3,5)"
'ここで上記funcStringで指定した関数を実行して戻り値を得たい。
End Sub

'テスト用の関数
Private Function testFunc(ByVal a As Integer, ByVal b As Integer) As Integer
testFunc = a + b
End Function


Microsoft.JScript.Eval.JScriptEvaluateを利用して文字列をコードとして評価する方法を試しましたが、VBで定義してある関数を呼び出すことはできませんでした。

PHPやJavascriptでいうところのeval関数
PHPのcall_user_func関数
と同じようなことを実現したいと思っております。

いろいろ探してみたのですが、解決策が見つからず、
文字列を解析してSELECT CASEによる分岐で実行する関数を1つずつ振り分けるしか方法はないのかもと思っているのですが、今の開発仕様では100近くの関数に関してこの処理をSELECTで分岐することになりそうなのです。

なにとぞ、よき解決方法がありましたら、お力添えよろしくお願いいたします。

A 回答 (2件)

関数のアクセス定義を Publicにして CallByNameを使えば出来そうですよ


関数の処理をフォームや任意のクラスに定義します

dim sRet as string
dim objCls as new myClass
sRet = CallByName( objCls, "testFunc", CallType.Method, "3", "5")

といった具合です ...

この回答への補足

ありがとうございます。
クラスに関数を持たせることにより、呼び出しに成功しました。
これだけでも、かなり楽になるのですが、

trueまたはfalseを返す関数testFunc1~testFunc9までが定義されているとして

あらかじめテキストで用意された
objCls.testFunc1(1,2) or objCls.testFunc1(2,3) or objCls.testFunc1(1,3) and objCls.testFunc2(1,3)
の真偽を判別を行いたい場合、さらに何か便利な方法はございますでしょうか。

真偽を判別するコード自体は別ソフト(具体的にはウェブアプリケーションでグラフィカルに)で生成したのち整形しvb.netアプリに渡すことを考えております。

vb.net側で楽できるように、整形してからコードテキストを渡したいと考えております。

良いアイデアがありましたらなにとぞご教授よろしくお願いします。

補足日時:2007/05/02 15:00
    • good
    • 0

>>文字列を解析してSELECT CASEによる分岐で実行する関数を1つずつ


>>振り分けるしか方法はないのかもと思っているのですが、
>>今の開発仕様では100近くの関数に関してこの処理をSELECTで分岐
>>することになりそうなのです

___________________________________________________________
難しいかも・・・
ほかの方法ではだめなのでしょうか?

クラスをひとつ作成し、その中に複数メソッドを定義、継承やポリモーフィズムによる 解決はできないでしょうか。

文字列をセットしているところで必要な値をクラスのプロパティに渡し、クラスのメソッドを呼び出せばいいのでは・・・
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!