我正在使用动态方法调用来访问动态加载的dll中的方法。
我在做:
dynamic classInstance = Activator.CreateInstance(cmd.Type);
classInstance.AddString(); //This line works
classInstance.AddString(cmd); //this line does not work
dll中的方法是:
public CustomCommandTest1()
{
}
public void AddString(Command cmd, ExposedVariables exv)
{
exv.ChopResults += "Add string Command";
}
public void AddString(ExposedVariables exv)
{
exv.ChopResults += "Add string Command";
}
public void AddString()
{
string ChopResults = "Add string Command";
}
我可以访问(调用)所有没有参数的方法,但是那些确实给我一个RuntimeBindingInternalCompilerException的方法。试图解决这个问题的例外中没有可用的信息。
我之前已经完成了这项工作。我不知道我在做什么不同。
此处的进一步发现表明它与复杂的变量类型有关。简单的内置变量类型有效。然而,复杂变量的定义没有区别,因为我在公共文件中引用了定义。
答案 0 :(得分:2)
AddString(cmd)
只有在cmd
实际 ExposedVariables
的实例时才有效。只有
public void AddString(Command cmd)
这就是你期待的样子。
这与复杂的变量类型无关 - 它与你试图调用一个不存在的方法有关。你提到给我们的那些超载你期望被称为过载?
答案 1 :(得分:0)
尝试
ExposedVariables exv = new ExposedVariables();
classInstance.AddString(cmd, exv);
因为您似乎没有只需要cmd的重载。
答案 2 :(得分:0)
如果示例中的cmd
变量是对Command
实例的引用而不是ExposedVariables
实例,则调用是错误的。您没有仅AddString
的{{1}}重载。