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で分岐することになりそうなのです。
なにとぞ、よき解決方法がありましたら、お力添えよろしくお願いいたします。
No.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側で楽できるように、整形してからコードテキストを渡したいと考えております。
良いアイデアがありましたらなにとぞご教授よろしくお願いします。
No.1
- 回答日時:
>>文字列を解析してSELECT CASEによる分岐で実行する関数を1つずつ
>>振り分けるしか方法はないのかもと思っているのですが、
>>今の開発仕様では100近くの関数に関してこの処理をSELECTで分岐
>>することになりそうなのです
___________________________________________________________
難しいかも・・・
ほかの方法ではだめなのでしょうか?
クラスをひとつ作成し、その中に複数メソッドを定義、継承やポリモーフィズムによる 解決はできないでしょうか。
文字列をセットしているところで必要な値をクラスのプロパティに渡し、クラスのメソッドを呼び出せばいいのでは・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
[VBA] Classから他のClassを呼...
-
共通モジュールでDBへの接続と...
-
VB.netで、動的な型変換を行い...
-
他のモジュールのプロシージャ...
-
VB.NETにて文字列で指定した関...
-
用語の意味の違いを教えてくだ...
-
VBA シートのボタン名を変更し...
-
worksheetFunctionクラスのVloo...
-
VBA(エクセル)で自動的にボタン...
-
ユーザーフォームを表示中にシ...
-
パソコンへの「Dropbox...
-
VBAがブレークモードになっ...
-
実行時エラー 438になった時の...
-
VBA CommandButtonの文字ずれ
-
「Columns("A:C")」の列文字を...
-
【C#/Java?】try-catchでcatch...
-
エクセルのVBAの標準モジュール...
-
ユーザーフォームに別シートか...
-
フォームの再読み込み
-
ListBoxで改行したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
共通モジュールでDBへの接続と...
-
[VBA] Classから他のClassを呼...
-
他のモジュールのプロシージャ...
-
Excel vbaで複数のテキストボッ...
-
VB.netで、動的な型変換を行い...
-
用語の意味の違いを教えてくだ...
-
WPFでCanvas の子要素にアクセ...
-
VBA クラスにプロパティが実装...
-
コンポーネント指向って、どの...
-
【JSF】バッキングビーンから別...
-
Form2の変数をForm1に渡す方法...
-
宣言とは違うオブジェクトを作...
-
コンストラクタとデリゲートの...
-
バウンドプロパティとは?
-
VB6で外部から静的アクセスが可...
-
hibernate criteria
-
Python クラスとモジュールの...
-
【VC++】クラスウィザードで指...
-
ユーザーコントロールのメソッ...
-
リフレクションはどういったも...
おすすめ情報