2011-05-17 94 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中的類加載靜態成員。我建議調用一個將返回一個共享接口(由兩個程序引用)的方法或其他方法,因爲不這樣做可能會很難解決。