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