2011-05-17 91 views
1

我负责设计一个系统,该系统由1)处理与设备通信的GUI和2)表示设备将在其中运行的模式的DLL。在DLL中封装C#GUI组件

每种模式都需要不同的配置细节,所以想法是让每个DLL都包含一个方法来生成一个可以放置在GUI中的控制填充面板。

到目前为止,我在C#中的工作一直没有涉及,我不知道如何实现这种功能。我没有成功找到这种实施的帮助或例子。有人能指引我朝着正确的方向吗?

回答

2

您将需要一个具有接口和基类的基本dll。其他DLL将然后引用该基础DLL并扩展/派生/实现这些基类/接口。

例如,如果你有一个DLL(Base.dll),有喜欢的界面:

public interface CoolGui { 
    void DrawGui(Graphics g); 
} 

然后你的另外两个DLL的(One.dll和Two.dll)将引用Base.dll和在他们的UI中实现CoolGui。

编辑:

当然,你需要在你的DLL的动态和使用反射来加载,让您的接口/基类的正确的实例。这里有一个codeproject文章来帮助:http://www.codeproject.com/KB/cs/DynLoadClassInvokeMethod.aspx

+0

我很欣赏这个回应!我的目标是将GUI编写为一个EXE,它有一个类来处理设备通信,并且每个操作模式都有一个DLL。每个DLL都会有一个返回一个GUI面板的方法,这个GUI面板被GUI控件填充。这是我遇到的麻烦。 – Jasen 2011-05-18 23:23:52

+0

这很好,你需要一个基本的dll来定义所有常见的界面/用户界面的东西。确保这些是公共类,然后你的其他DLL只需要从此继承。至于exe文件,它会将所有dll加载到一个给定的目录中,然后使用反射从这些dll中加载相应的类。 – 2011-05-18 23:26:21

+0

这是一个使用这些想法的项目:http://code.google.com/p/wozpro/ – 2011-05-18 23:27:53

0

你的意思是你想能够动态加载DLLs?退房Assembly.LoadFile。从那里你可以使用它的成员和GetMember动态地从DLL中的类加载静态成员。我建议调用一个将返回一个共享接口(由两个程序引用)的方法或其他方法,因为不这样做可能会很难解决。