0

dllを動的にロードしてMyDllClassオブジェクトを作成したい。私のコードはおおまかに次のとおりです(無関係な部分が削除されています):

MyDllClass.cs

namespace MyDllNameSpace
{
    public class MyDllClass
    {

        private EventCallBack m_DelegateCallBack = null;

        public MyDllClass(EventCallBack eventCallBack)
        {
            m_DelegateCallBack = eventCallBack;
        }

        public MyDllClass()
        {
        }
        ...
    }
}

MyDllCallBackNameSpace.cs

namespace MyDllCallBackNameSpace
{
    public delegate void EventCallBack(string message);
}

空のコンストラクターを使用してオブジェクトを作成できましたが、他のコンストラクターを機能させることができませんでした。私は得るArgumentException

at System.Reflection.RuntimeConstructorInfo.InternalInvoke()  
at System.Reflection.RuntimeConstructorInfo.Invoke()  
at System.Reflection.ConstructorInfo.Invoke() at MyProgram.InitMyObject()  
at ...

これが私のコードです:

MyProgram.cs

public void InitMyObject(EventCallBack callBack)
    System.Reflection.Assembly assembly = System.Reflection.Assembly.LoadFrom(DLL_PATH);
    Type type = assembly.GetType(CLASS_NAME);
    ConstructorInfo[] constructors = type.GetConstructors();
    if (type != null)
    {
        // empty constructor, works!!!
        //return constructors[1].Invoke(new object[0]); 
        // This one gives InvalidArgument exception
        return constructors[0].Invoke(new object[] {callBack});
    }
    return null;
}

MyDllCallBackNameSpace.csファイルが両方のプロジェクト(.dllおよび.exeプロジェクト)に追加され、ドライブ上の同じ物理ファイルを参照しています。しかし、私はそれがまだ異なるものとして扱われているのではないかと思います。それが機能しない理由、または回避策はありますか?

4

2 に答える 2

0

ConstructorInfo.Invokeメソッド(Object [])のArgumentExceptionは、「パラメーター配列には、このコンストラクターで受け入れられる型に一致する値が含まれていません」と述べています。あなたがそうするときにあなたが期待するコンストラクターを手に入れていると確信していますconstructors[0]か?ConstructorInfo constructor = type.GetConstructor(new Type[] { typeof(EventCallback) });GetConstructorsの代わりに試してください。

于 2012-04-30T14:51:39.603 に答える
0

MyDllCallBackNameSpace.cs私はこの購入を別のdllに移動することをなんとか修正しました。次に、両方のプロジェクトからそのdllを参照しました。

于 2012-04-30T17:27:10.063 に答える