调用函数&在c#中将输出返回到外部DLL

时间:2016-03-11 08:32:51

标签: c# .net system.reflection

我有一个通过反射和

读取外部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));
       }

我没有得到的是如何在我的代码中初始化此委托&将这些参数传递给我的函数?

2 个答案:

答案 0 :(得分:0)

你试过MethodBase.Invoke Method (Object, Object[])吗?

也许this可以帮到你?

答案 1 :(得分:0)

外部DLL在使用System.Delegate而不是更具体的委托方面有点烦人,但这仍然很容易解决。

要将GetValue方法转换为委托,您可以执行以下操作:

var delegate = (Func<string, int, int>)GetValue;

就是这样:))

由于您正在使用反射(您是否必须?是否存在可以使用的接口或其他东西?您是否必须首先动态加载程序集?),您可能需要手动转换结果委托给Delegate(这只是另一个演员),但我不确定是否有必要。只需在属性上调用setter并将其传递给委托,你应该没问题。