基于插件的应用程序在C#
我必须使用我选择的语言制作图形用户界面应用程序.应用程序将在
Windows XP上运行.它将是某种复杂的窗体应用程序.
我认为,根据大多数建议,C#将是最好的使用. 从配置文件读取后,GUI左侧的树结构将会被填充,这将是一个二进制文件. (但是最初我可以使用简单的ASCII文件来测试我的代码.)应用程序将通过该GUI接受用户的一些输入,并将回写到同一配置文件,并将反映树结构或标签或表单上任何其他相关字段的更改. 每个选项卡将有3个选项卡和3个对应??的配置文件. 此外,项目中已经存在一些.cpp文件.这些文件以及一些.h文件在其中包含一些重要的定义和常量.这些需要与我的C#应用??程序集成.我不知道如何做到这一点,但我确信可以通过在.dll中编译.cpp代码,然后将编译的.dll公开到我的C#应用??程序.如果您需要更多关于顶级设计的信息,请通知我. 谢谢, 解决方法
要手动实现插件界面,您将需要一种这样的方法.我已经留下了一些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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |