Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为调用宿主程序中定义的静态函数的c#应用程序创建扩展_C# - Fatal编程技术网

为调用宿主程序中定义的静态函数的c#应用程序创建扩展

为调用宿主程序中定义的静态函数的c#应用程序创建扩展,c#,C#,我想为扩展创建引擎,现在我有一个名为“Module”的基本类,它包含很多虚拟函数,每个扩展都是一个类,它继承“Module”,并用自己的代码覆盖函数(大部分是钩子) 我希望能够将这些扩展放在单独的二进制文件中,并“动态”加载它 我创建了一个用于加载这些插件的简单处理程序: public static bool LoadMod(string path) { try { if (File.Exists(path))

我想为扩展创建引擎,现在我有一个名为“Module”的基本类,它包含很多虚拟函数,每个扩展都是一个类,它继承“Module”,并用自己的代码覆盖函数(大部分是钩子)

我希望能够将这些扩展放在单独的二进制文件中,并“动态”加载它

我创建了一个用于加载这些插件的简单处理程序:

    public static bool LoadMod(string path)
    {
        try
        {
            if (File.Exists(path))
            {
                System.Reflection.Assembly library = System.Reflection.Assembly.LoadFrom(path);
                if (library == null)
                {
                    Program.Log("Unable to load " + path + " because the file can't be read", true);
                    return false;
                }
                Type[] types = library.GetTypes();
                Type type = library.GetType("wmib.RegularModule");
                Type pluginInfo = null;
                foreach (Type curr in types)
                {
                    if (curr.IsAssignableFrom(type))            
                    {
                        pluginInfo = curr;
                        break;
                    }
                }
                if (pluginInfo == null)
                {
                    Program.Log("Unable to load " + path + " because the library contains no module", true);
                    return false;
                }
                Module _plugin = (Module)Activator.CreateInstance(pluginInfo);
                return true;
            }
        }
        catch (Exception fail)
        {
            core.handleException(fail);
        }
        return false;
    }
我的问题是,这些模块正在调用宿主应用程序中的静态类中的函数。可以在扩展的源代码中创建这个静态类的一些“骨架”吗?我尝试在第二个源代码中创建具有相同名称和参数的空函数的类,但由于某种原因,这不起作用(每次尝试加载它时,我都会得到:异常已由位于System.Reflection.MonoCMethod.Invoke的invocation.mscorlib的目标抛出)

以下是我希望能够做到的示例:

有一个包含扩展处理程序和一些自己的静态函数的主机应用程序。
宿主应用程序从二进制文件加载模块,并将其插入到一些模块数组中(这是在继承“模块”的每个类的构造函数中完成的.此模块包含一些调用宿主应用程序静态函数的函数。我需要能够调用宿主应用程序源代码中定义的静态函数,甚至插件源代码中定义的静态函数,其中不包含静态函数的代码。我希望有一点清楚:)

好的,实际上并不像我想的那么难,我只是将主机二进制文件引用到扩展中,它启用了扩展中主机的所有静态元素和类。

该静态类在主机中有依赖项吗?是的,基本上不可能将其“复制粘贴”到模块中,因为我可能要复制整个主机的全部代码application@Hardrada实际上,我只想创建一些API函数,这个扩展可以通过(更改应用程序中的现有内容等)与主机通信