微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

基于插件的应用程序在C#

我必须使用我选择的语言制作图形用户界面应用程序.应用程序将在 Windows XP上运行.它将是某种复杂的窗体应用程序.
我认为,根据大多数建议,C#将是最好的使用.
配置文件读取后,GUI左侧的树结构将会被填充,这将是一个二进制文件. (但是最初我可以使用简单的ASCII文件来测试我的代码.)应用程序将通过该GUI接受用户的一些输入,并将回写到同一配置文件,并将反映树结构或标签或表单上任何其他相关字段的更改.

每个选项卡将有3个选项卡和3个对应​​的配置文件.
我现在需要一些帮助设计应用程序.我打算做主机应用程序(主应用程序),并使用3个选项卡控件作为插件.这可行吗如果可以,请指导我.我的意思是我如何在C#中编写3个插件,以及如何编写界面,以便主应用程序知道要加载哪个插件以及何时加载它?我的项目文件夹下会有一个单独的“插件文件夹吗?我希望你有一点希望,尽管这个信息对你来说太少了.

此外,项目中已经存在一些.cpp文件.这些文件以及一些.h文件在其中包含一些重要的定义和常量.这些需要与我的C#应用​​程序集成.我不知道如何做到这一点,但我确信可以通过在.dll中编译.cpp代码,然后将编译的.dll公开到我的C#应用​​程序.如果您需要更多关于顶级设计的信息,请通知我.

谢谢,
Viren

解决方法

要手动实现插件界面,您将需要一种这样的方法.我已经留下了一些Todo,在那里你想要增强错误处理和/或使实现更具体化.
public List<T> Loadplugin<T>(string directory)
    {
        Type interfaceType = typeof(T);
        List<T> implementations = new List<T>();

        //Todo: perform checks to ensure type is valid

        foreach (var file in System.IO.Directory.GetFiles(directory))
        {
            //Todo: add proper file handling here and limit files to check
            //try/catch added in place of ensure files are not .dll
            try
            {
                foreach (var type in System.Reflection.Assembly.LoadFile(file).GetTypes())
                {
                    if (interfaceType.IsAssignableFrom(type) && interfaceType != type)
                    { 
                        //found class that implements interface
                        //Todo: perform additional checks to ensure any
                        //requirements not specified in interface
                        //ex: ensure type is a class,check for default constructor,etc
                        T instance = (T)Activator.CreateInstance(type);
                        implementations.Add(instance);
                    }
                }
            }
            catch { }
        }

        return implementations;
    }

调用示例

List<IPlugin> plugins = Loadplugin<IPlugin>(path);

对于你的问题的c部分.有几种不同的方法可以解决这个问题,但是正确的选择取决于你的具体情况.你可以在c中创建一个clr兼容的.dll,你的c#项目可以引用它,并且像其他引用的其他.dll一样调用.此外,您可以使用P/Invoke调用本机.dll.

原文地址:https://www.jb51.cc/csharp/93232.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐