• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Type.GetMethodで困っています)

Type.GetMethodで困っています

このQ&Aのポイント
  • 文字列クラス名より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&"型を定義することはできないのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • ape5
  • ベストアンサー率57% (85/148)
回答No.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 -------------------------------------------------------

type0000
質問者

お礼

Type() 思いつきませんでした どうもーです

関連するQ&A

専門家に質問してみよう