我有一个通过反射和
读取外部DLL的项目 System.Reflection.Assembly BuildDll = System.Reflection.Assembly.LoadFrom(System.AppDomain.CurrentDomain.BaseDirectory + BuildDllName);
Type BuildWindow = BuildDll.GetType(BuildFormType);
System.Reflection.MethodInfo constructors = BuildWindow.GetMethod("Initialize");
lMethod = BuildWindow.GetMethod("Submit");
TypeUserControl = Activator.CreateInstance(BuildWindow);
在这段代码中,我加载DLL并读取它的两个方法Submit(调用此方法执行某些操作)&初始化(传递DLL所需的数据)
现在我必须在我的代码中将一个函数的结果返回到该外部DLL的按钮事件上的DLL,我的代码中有一个返回所需整数值的方法
int GetValue(string id, int key)
在外部DLL中,委托被定义为
private System.Delegate _BaseFunction;
public Delegate BaseFunction
{
set { _BaseFunction= value; }
}
按钮单击需要显示外部DLL结果的事件
private void btnBaseInvoke_Click(object sender, RoutedEventArgs e)
{
object[] parameters = new object[2];
parameters[0]= Convert.ToString(txtParam30.Text.Trim());
parameters[1]= Convert.ToInt32(txtParam31.Text.Trim());
object obj = _BaseFunction.DynamicInvoke(parameters);
MessageBox.Show(Convert.ToString(obj));
}
我没有得到的是如何在我的代码中初始化此委托&将这些参数传递给我的函数?
答案 0 :(得分:0)
你试过MethodBase.Invoke Method (Object, Object[])
吗?
也许this可以帮到你?
答案 1 :(得分:0)
外部DLL在使用System.Delegate
而不是更具体的委托方面有点烦人,但这仍然很容易解决。
要将GetValue
方法转换为委托,您可以执行以下操作:
var delegate = (Func<string, int, int>)GetValue;
就是这样:))
由于您正在使用反射(您是否必须?是否存在可以使用的接口或其他东西?您是否必须首先动态加载程序集?),您可能需要手动转换结果委托给Delegate
(这只是另一个演员),但我不确定是否有必要。只需在属性上调用setter并将其传递给委托,你应该没问题。