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
.
我正在尝试 运行 一个 .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
.