从DLL调用函数

本文关键字:函数 调用 DLL | 更新日期: 2023-09-27 17:59:15

众所周知,您可以在dll中拥有函数,引用dll,然后从主可执行文件中调用函数。我想知道相反的方式是否也可能?所以我喜欢从dll调用主可执行文件中的函数,而不需要在dll中调用实际的函数。原因:我正在开发一个插件系统。

从DLL调用函数

是的,可执行文件可以作为引用添加到您的项目中,您可以像从引用的dll 调用函数一样使用它们

你有点像在比较苹果和桔子:构建系统引用dll与插件系统完全不同,插件系统在运行时一切都会发生。通常,一个插件系统,你想从插件主机(你的exe)调用一些函数,它是这样的(简化):

//in a common project
//functions from the host that will be callable by the plugin
public interface PluginHost
{
  void Foo();
}
//the plugin
public interface Plugin
{
  void DoSomething( PluginHost host );
}
//in the exe
class ThePluginHost : PluginHost
{
  //implement Foo
}
//in the plugin
class ThePlugin : Plugin
{
  //implement DoSomething,
  //has access to exe methods through PluginHost
}
//now al that's left is loading the plugin dll dynamically,
//and creating a Plugin object from it.
//Can be done using Prism/MEF etc, that's too broad of a scope for this answer
PluginHost host = new ThePluginHost();
Plugin plugin = CreatePluginInstance( "/path/to/dll" );
plugin.DoSomething( host );