2013-03-12 145 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。