C# 托管DLL如何调用托管宿主中的函数?

C#菜鸟June 2019-04-02 11:09:07
问题描述:C#程序A中需要调用C#编写的DLL,但是DLL中又需要用到A中的方法,请问如何实现?使用什么技术?
...全文
252 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xian_wwq 2019-04-03
  • 打赏
  • 举报
回复
DLL中需要用到宿主A中方法, ---不能直接用,但可以间接用。本质和回调一样。
北京.NET 2019-04-02
  • 打赏
  • 举报
回复
反射可以

/// <summary>
/// 全局通用反射示例
/// </summary>
/// <param name="assemblyName">项目名称</param>
/// <param name="className">类名称</param>
/// <param name="methodName">函数名称</param>
/// <param name="parms">参数</param>
/// <returns></returns>
public static Object GetClassMethodReturnResult(string assemblyName, string className, string methodName, Object[] parms)
{
Assembly ass = Assembly.Load(assemblyName);
Type[] types = ass.GetTypes();
object result = null;
foreach (Type item in types)
{
if (item.Name.Equals(className))
{
try
{
if (parms != null && parms.Length > 0)
{

object obj = Activator.CreateInstance(item);
Type[] types1=new Type[parms.Length];
for (int i = 0; i < parms.Length; i++)
{
types1[i] = parms[i].GetType();
}
MethodInfo[] methods = item.GetMethods();
foreach (var mm in methods)
{
if (mm.Name == methodName)
{
if(mm.GetParameters().Length==parms.Length)
result = mm.Invoke(obj, parms);
}
}

}
else
{
object obj = Activator.CreateInstance(item);
MethodInfo m = item.GetMethod(methodName,new Type[]{});
result = m.Invoke(obj, parms);
}
}
catch (Exception e)
{
throw e;
}
}
}
return result;
}
  • 打赏
  • 举报
回复
“C#编写的DLL”是可以在你所谓的“C#程序A"之前编写的,不依赖于它。不存在“调用A的方法”的说法。 这样说本身其实就是复述那些不懂编程设计的用户的需求时的描述方式。
  • 打赏
  • 举报
回复
从设计实现角度,没有什么“又需要用到A中的方法”的说法。因为对象要选择好谁是“服务”谁是“客户”,一旦选择好了那么就要单项依赖,反方向的(倒置的)沟通则通过事件机制。 一旦 A 依赖于B,那么就不存在说“B调用A”的说法,而是“B要将事件(和参数)通知给自己的宿主”,这样才是比较规范的描述。
正怒月神 2019-04-02
  • 打赏
  • 举报
回复
循环引用,要报错的。。。。
  • 打赏
  • 举报
回复
这叫做事件。你有没有学过自定义事件机制?
stherix 2019-04-02
  • 打赏
  • 举报
回复
这种设计就是有问题的 而且编译器也不会允许
C#菜鸟June 2019-04-02
  • 打赏
  • 举报
回复
没有人知道么?
C#菜鸟June 2019-04-02
  • 打赏
  • 举报
回复
引用 6 楼 以专业开发人员为伍 的回复:
“C#编写的DLL”是可以在你所谓的“C#程序A"之前编写的,不依赖于它。不存在“调用A的方法”的说法。

这样说本身其实就是复述那些不懂编程设计的用户的需求时的描述方式。


没听过方法属性注入?

110,532

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧