在 c# 中调用函数 & return 输出到外部 DLL

Call a function & return output to an external DLL in c#

我有一个通过反射读取外部 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(调用此方法执行某些操作)和 Initialize(传递 DLL 所需的数据)

现在我必须 return 一个函数的结果从我的代码到那个外部 DLL 的按钮事件上的 DLL,我的代码中有一个方法 returns 所需的整数值

 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));
       }

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

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

也许this能帮到你?

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

要将您的 GetValue 方法变成一个委托,您可以这样做:

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

就是这样:)

既然你在使用反射(你必须吗?没有你可以使用的接口之类的吗?你必须首先动态加载程序集吗?),你可能需要手动将生成的委托转换为 Delegate(这只是另一个转换),但我不确定是否有必要这样做。只需在 属性 上调用 setter 并将其传递给委托,你应该没问题。