2013-03-12 153 views
3

說我一個類庫項目中像這樣一類被稱爲SomeClass-如何在運行時加載類庫DLL並使用VB.NET運行類函數?

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

我得到一個SomeClass.dll,我想在運行時從另一個Windows窗體應用程序加載,然後使用它調用DoIt()功能並在消息框或其他東西中顯示它的價值。我怎麼做?

回答

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。