0

DLL ランタイムをロードし、DLL に存在するクラスの 1 つでメソッドを呼び出そうとしています。

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

の 2 番目の引数はActivator.CreateInstance(Type, Object[])、コンストラクターにパラメーターを指定します。コンストラクターを変更して を取得するObject[]か、 , だけで呼び出してからTypeActivator.CreateInstance(Type)オブジェクト配列を渡してメソッドを呼び出す必要があります。

msdn のドキュメントを参照してください。

于 2014-03-10T01:44:37.377 に答える