2011-05-17 12 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を実装します。

EDIT:

そしてもちろん、あなたが動的にDLLの中にロードし、あなたのインターフェイス/ベースクラスの正しいインスタンスを取得するためにリフレクションを使用する必要があります。以下のコードプロジェクトの記事を参考にしてください:http://www.codeproject.com/KB/cs/DynLoadClassInvokeMethod.aspx

+0

私は返答を感謝します!私の目標は、デバイス通信に対処するクラスを持ち、動作モードごとに1つのDLLを持つEXEとしてGUIを作成することでした。各DLLには、GUIコントロールが実装されたGUIパネルが返されるメソッドがあります。私はこの問題を抱えています。 – Jasen

+0

これは問題ありません。すべての共通インターフェース/ UIの定義をする基本DLLが必要です。これらがパブリッククラスであることを確認してから、他のDLLはこれを継承するだけです。 exeに関しては、指定されたディレクトリにすべてのdllをロードしてから、それらのdllから適切なクラスをロードするためにリフレクションを使用します。 –

+0

これらのアイデアを使用するプロジェクトは次のとおりです。http://code.google.com/p/wozpro/ –

0

DLLを動的にロードできるようにしたいということですか? Assembly.LoadFileをチェックしてください。そこから、そのメンバーとGetMemberを使用してDLL内のクラスから静的メンバーをすべて動的に読み込むことができます。私は共有インターフェース(両方のプログラムで参照される)または何かを返すメソッドを呼び出すことをお勧めします。

関連する問題