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

时间:2015-06-16 14:08:04

标签: vb.net exception dll instance

我正在尝试运行.dll并创建它的实例,但我收到此错误:

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

我的代码:

{
   "error": {
      "message": "(#803) Cannot query users by their username ({Username})",
      "type": "OAuthException",
      "code": 803
   }
}

有谁知道我做错了什么? .dll中的主要子包括“MsgBox(”成功“)”,所以如果它正常工作,它肯定会显示一些东西。

如果我将dll跳到字节行并将Dim a跳到Assembly.Load(“data.dll”),它会给我一个错误,即无法打开它作为类似整数的类型。

提前致谢!

编辑:

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

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

链接指向我的data.dll。 原因还是一样,为什么它不起作用? 我怎么能解决它?

1 个答案:

答案 0 :(得分:1)

你写道:

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

Assembly.Load不返回Byte数组,而是返回Assembly类的实例(这正是错误消息告诉您的内容)。

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

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

如果要按路径加载程序集,可以使用Assembly.LoadFrom(assemblyFile As String)

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

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

命名空间为Class1,类名也为Class1,因此您必须使用Class1.Class1