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 ...

这是我的代码:

我的程序.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 回答