C# 调用函数&;将输出返回到c中的外部DLL#
我有一个项目,通过反射和C# 调用函数&;将输出返回到c中的外部DLL#,c#,.net,system.reflection,C#,.net,System.reflection,我有一个项目,通过反射和 System.Reflection.Assembly BuildDll = System.Reflection.Assembly.LoadFrom(System.AppDomain.CurrentDomain.BaseDirectory + BuildDllName); Type BuildWindow = BuildDll.GetType(BuildFormType); System.Reflection.MethodInfo constructors =
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所需的数据)
现在我必须在外部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));
}
我没有得到的是如何在代码中初始化此委托并将这些参数传递给函数?您是否尝试了
MethodBase.Invoke方法(对象, 对象[])
也许能帮你 使用
System.Delegate
而不是更具体的委托时,外部DLL有点烦人,但这仍然很容易解决
要将GetValue
方法转换为委托,可以执行以下操作:
var delegate = (Func<string, int, int>)GetValue;
var delegate=(Func)GetValue;
就这样:)
由于您使用的是反射(是否必须?是否有可以替代的接口或其他什么?是否必须首先动态加载程序集?)。只需调用属性上的setter并将其传递给委托,就可以了。感谢您的回复,但这不会有帮助,因为调用方法将从外部dll调用,在这种情况下,这是不可能的。嗨,Luaan,感谢您的回复。是,我正在动态加载此程序集。实际上,我正在为客户的自定义控件(完全由他们开发,我只需要初始化并加载到我的模块中)提供一个框架,它需要我的项目模块的结果。你能告诉我在上面提到的例子中我可以把你的解决方案放在哪里吗。此委托是否将由其代码中的外部dll调用?如果是这样,me模块将如何绑定此代理?您已在问题中发布了所有相关代码。只需在
BaseFunction
上调用setter,这就是外部DLL所调用的。Yupp,得到了相同的结果。非常感谢。:)