VB.net -- 创建程序集的实例

VB.net -- Creating an instance of an assembly

我正在尝试 运行 一个 .dll 并创建它的一个实例,但是我收到了这个错误:

错误 1 ​​'System.Reflection.Assembly' 类型的值无法转换为“一维字节数组”。


我的代码:

Public NotInheritable Class method
    Private Sub method_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        Try
            Dim dll() As Byte = Assembly.Load("data.dll")
            Dim a = Assembly.Load(dll)
            Dim b As Type = a.GetType("data.Class1")
            Dim c As Object = Activator.CreateInstance(b)
            b.InvokeMember("main", BindingFlags.Default Or BindingFlags.InvokeMethod, Nothing, c, Nothing)
        Catch ex As Exception
            MsgBox("Caught: {0}", ex.Message)

        End Try
    End Sub
End Class

有谁知道我做错了什么? .dll 中的主要子程序包括 "MsgBox("Success")",所以如果它工作正常,它肯定会告诉我一些东西。

如果我跳过 dll 到字节行并将 Dim a 设置为 Assembly.Load("data.dll"),它会给我一个错误,它不能作为类似类型的整数打开。

提前致谢!

编辑:

好吧,我的第一个问题得到了回答。我的新的非常相似:

    Try
        Dim g As New Net.WebClient()
        Dim dll() As Byte = g.DownloadData("http://ge.tt/api/1/files/6YVzYRI2/0/blob?download")
        Dim a = Assembly.Load(dll)
        Dim b As Type = a.GetType("data.Class1")
        Dim c As Object = Activator.CreateInstance(b)
        b.InvokeMember("main", BindingFlags.Default Or BindingFlags.InvokeMethod, Nothing, c, Nothing)
    Catch ex As Exception
        MsgBox("Caught: {0}", ex.Message)

    End Try

随着 link 通往我的 data.dll。 不起作用的原因还是一样吗? 我该如何修复它?

你写:

Dim dll() As Byte = Assembly.Load("data.dll")

Assembly.Load 不是 return 字节数组,而是 Assembly class 的实例(这正是错误消息告诉您的内容)。


另请注意,当您使用 Assembly.Load(assemblyString As String) 时,该方法需要程序集名称(的长格式),而不是文件名;

形式的东西
"SampleAssembly, Version=1.0.2004.0, Culture=neutral, PublicKeyToken=8744b20f8da049e3"

如果你想通过它的路径加载程序集,你可以使用 Assembly.LoadFrom(assemblyFile As String).


要加载类型 Class1,您必须指定类型的全名(命名空间 + class 名称):

Dim b As Type = a.GetType("Class1.Class1")

命名空间是Class1,class名字也是Class1,所以你要用Class1.Class1.