【问题标题】:Callback from dynamically loaded DLL从动态加载的 DLL 回调
【发布时间】:2016-12-20 17:01:54
【问题描述】:

我想知道如何从动态加载的 dll 回调主 exe? (注意:这个 dll 将在回调后的某个时间点被卸载)

上下文 C#

我正在设计一个服务原型,该服务在开发期间可以更新其核心。我有一个存根 main,它将对“main dll”进行服务调用。我希望能够回调主 exe,告诉它在完成最新 dll 的新副本后重新加载核心 dll。我有负载 - 卸载工作。但是,我无法回调或更新传递的 IntPtr 以使其工作以及其他类似的想法工作。例如

    loader.ExecuteStaticMethod(cMain_DLL, "Class1", "My_CallBack", new object[] {out _Count }); 

不会编译

我使用了稍微修改的http://www.c-sharpcorner.com/uploadfile/girish.nehte/how-to-unload-an-assembly-loaded-dynamically-using-reflection/来加载和卸载dll,以及调用dll中的函数。

        Type[] types = parameters.Select(o=>o.GetType()).ToArray();

        MethodInfo MyMethod = MyType.GetMethod(methodName, types); <= can retun null for some objects
        MyMethod.Invoke(inst, BindingFlags.InvokeMethod, null, parameters, null);

【问题讨论】:

标签: c# dll


【解决方案1】:

如果您只需要重新加载事件,请检查EventWaitHandle。一旦服务调用Set(),您的存根就可以在该句柄上WaitOne() 并采取相应的行动。

【讨论】:

  • 你能给我一个网址或例子吗?我对您所指的内容不够熟悉,不知道哪一部分在 main.exe 中,哪一部分在加载的 dll 中。谢谢
  • 存根部分:var reloadEvent = new EventWaitHandle(false, EventResetMode.ManualReset, "MyUniqueName'); ... //load your library ... reloadEvent.WaitOne(); ... //reload here 库部分:var reloadEvent = new EventWaitHandle(false, EventResetMode.ManualReset, "MyUniqueName'); // trigger reload reloadEvent.Set();
猜你喜欢
  • 2010-09-30
  • 2012-01-31
  • 2011-09-06
  • 1970-01-01
  • 1970-01-01
  • 2020-08-26
  • 2022-05-16
  • 2023-03-24
  • 2013-10-10
相关资源
最近更新 更多