我一直在尝试使用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。
答案 0 :(得分:0)
您的REM
类是一个非托管类,因此反射无法查看其方法。使用/ CLR编译选项不会自动强制管理所有类。它只允许您在项目中拥有托管类。
要允许拨打InvokeMember
,您需要将REM
设为托管类。这可以通过将ref
添加到类声明中来完成,如下所示:
public ref class REM{ ... };