VB.net加载DLL

时间:2014-01-11 20:05:52

标签: vb.net dll load .net-assembly reflector

我一直在尝试使用Reflector加载DLL

Imports System.Reflection

我有一个用c ++编写的简单DLL文件/ CLR(这是整个文件)

using namespace System;


namespace ASSEMBLE{

public class REM{
    public:
        int VALUE(){
            return 100;
        }

    };

};

在我的VB.net butten click事件中我有

 Dim dllPath As String = "C:\Users\richard\Documents\Visual Studio 2012\Projects\link\link\bin\Release\dlltest.dll"
        ' load the assembly 
        Dim assembly1 As System.Reflection.Assembly = Assembly.LoadFrom(dllPath)
        ' get the type 
        Dim t As Type = assembly1.GetType("ASSEMBLE.REM")
        ' create an instance and add it. 
        Dim c As Object = Activator.CreateInstance(t)


        MsgBox(t.InvokeMember("VAULE", BindingFlags.Default Or BindingFlags.InvokeMethod, Nothing, c, {}))

当事件被触发时(即我加载了dll)我得到错误:

Method 'ASSEMBLE.REM.VALUE' not found

使用:

<DllImport("DLL.dll")> Public Shared Function VALUE() As Integer
        End Function

不是一种选择。我需要在运行后加载DLL。

1 个答案:

答案 0 :(得分:0)

您的REM类是一个非托管类,因此反射无法查看其方法。使用/ CLR编译选项不会自动强制管理所有类。它只允许您在项目中拥有托管类。

要允许拨打InvokeMember,您需要将REM设为托管类。这可以通过将ref添加到类声明中来完成,如下所示:

public ref class REM{
    ...
};