- ベストアンサー
Type.GetMethodで困っています
- 文字列クラス名よりDLLの関数を呼ぶプログラムを作っています。問題は関数取得を行っているところです。呼び出し側で、Dim metDll As MethodInfo = typDll.GetMethod("Main1", typParam)を行うとNothingが返ってきてしまいます。
- 原因はDLLのMain1の第2引数がByRefになっていることでした。そこでByRefに対応するために、Dim metDll As MethodInfo = typDll.GetMethod("Main1", BindingFlags.Public Or BindingFlags.Instance, Nothing, New Type() {System.Type.GetType("System.String"), System.Type.GetType("System.String&")}, Nothing))にすると関数の取得ができました。
- しかしこの場合、DLL側の関数パラメータ数分、型を定義しなくてはいけないし、オーバーライドしているMain関数すべてに対応できなくなってしまいます。そこで、Dim typParam() As Type = Type.GetTypeArray(strParam)の定義時にByRefにあたる部分に"System.String&"型を定義することはできないのでしょうか?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
以下のように呼び出し側を変更するとうまくいくようです。 ------------------------------------------------------- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim myObj As Object() = New Object() {"C", "VB", "J"} Dim typParam As Type() = {Type.GetType("System.String"), Type.GetType("System.String"), Type.GetType("System.String&")} Dim asm As [Assembly] = [Assembly].LoadFrom("ByRef_Test.dll") Dim typDll As Type = asm.GetType("ByRef_Test.test.DLL_TEST") Dim objDll As Object = Activator.CreateInstance(typDll) Dim metDll As MethodInfo = typDll.GetMethod("Main1", typParam) Dim Ret As String = metDll.Invoke(objDll, myObj) If myObj(2).ToString = "参照返し" Then MsgBox("成功") End If End Sub -------------------------------------------------------
お礼
Type() 思いつきませんでした どうもーです