3

SomeClassというクラスライブラリプロジェクト内にこのようなクラスがあるとしましょう-

Public Class SomeClass
  Public Function DoIt() as String
    Return "Do What?"
  End Function
End Class

別のWindowsフォームアプリケーションから実行時にロードしたいを取得しSomeClass.dll、関数を呼び出してDoIt()、メッセージボックスなどにその値を表示します。それ、どうやったら出来るの?

4

1 に答える 1

3

DoItクラス状態を必要としないため、共有することをお勧めします。

Public Class SomeClass
    Public Shared Function DoIt() as String
        Return "Do What?"
    End Function
End Class

それを呼び出すのは簡単です:

' Loads SomeClass.dll
Dim asm = Assembly.Load("SomeClass")  

' Replace the first SomeClass with the base namespace of your SomeClass assembly
Dim type = asm.GetType("SomeClass.SomeClass")

Dim returnValue = DirectCast(type.InvokeMember("DoIt", _
                                               BindingFlags.InvokeMethod | BindingFlags.Static, _
                                               Nothing, Nothing, {}),
                             String)

メソッドを共有できない場合は、Activator.CreateInstanceを使用してクラスのインスタンスを作成し、それをパラメーターとしてType.InvokeMemberに渡すことができます。

私のコード例はすべて Option Strict On と Option Infer On を前提としています。

于 2013-03-12T10:46:11.370 に答える