0

我正在尝试加载 DLL 运行时并调用 DLL 中存在的类之一中的方法。

这是我加载 DLL 和调用方法的地方,

Object[] mthdInps = new Object[2]; 
mthdInps[0] = mScope; 
string paramSrvrName = srvrName; 
mthdInps[1] = paramSrvrName; 
Assembly runTimeDLL = Assembly.LoadFrom("ClassLibrary.dll"); 
Type runTimeDLLType = runTimeDLL.GetType("ClassLibrary.Class1"); 
Object compObject = Activator.CreateInstance(runTimeDLLType, mthdInps); 
Type compClass = compObject.GetType(); 
MethodInfo mthdInfo = compClass.GetMethod("Method1"); 
string mthdResult = (string)mthdInfo.Invoke(compObject, null);

这是我试图调用的类(存在于 DLL 中)及其方法,

namespace ClassLibrary
{
    public class Class1
    {
        public Class1()   {}
        public String Method1(Object[] inpObjs)
        {
        }
    }
}

我得到的错误是这样的, Constructor on type 'ClassLibrary.Class1' not found.

请帮忙。

4

3 回答 3

3

似乎您正在将方法参数传递给类构造函数。

这个:

Object compObject = Activator.CreateInstance(runTimeDLLType, mthdInps); 

应该只是:

Object compObject = Activator.CreateInstance(runTimeDLLType); 

然后,您使用参数调用该方法:

string mthdResult = (string)mthdInfo.Invoke(compObject, new object[] { objs });
于 2014-03-10T01:47:06.067 回答
1

的第二个参数Activator.CreateInstance(Type, Object[])指定构造函数的参数。您需要修改构造函数以使用Object[], 或仅使用Type,调用它Activator.CreateInstance(Type),然后调用传入对象数组的方法。

请参阅msdn文档。

于 2014-03-10T01:44:37.377 回答
0

尝试这个:

Object[] mthdInps = new Object[2]; 
mthdInps[0] = mScope; 
string paramSrvrName = srvrName; 
mthdInps[1] = paramSrvrName; 
Assembly runTimeDLL = Assembly.LoadFrom("ClassLibrary.dll"); 
Type runTimeDLLType = runTimeDLL.GetType("ClassLibrary.Class1"); 
//do not pass parameters if the constructor doesn't have 
Object compObject = Activator.CreateInstance(runTimeDLLType); 
Type compClass = compObject.GetType(); 
MethodInfo mthdInfo = compClass.GetMethod("Method1"); 

// one parameter of type object array
object[] parameters = new object[] { mthdInps };
string mthdResult = (string)mthdInfo.Invoke(compObject, parameters );
于 2014-03-10T02:03:58.487 回答