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プロジェクト)に追加され、ドライブ上の同じ物理ファイルを参照しています。しかし、私はそれがまだ異なるものとして扱われているのではないかと思います。それが機能しない理由、または回避策はありますか?