none
共有DLLの作り方 RRS feed

  • 質問

  • プロジェクト数:3件

    言語:C#(すべて)

    実行:exe 2つ、dll1つ

    プロセス数:1

    C#で、2つのプロジェクト(AとB)で作成したexeに対して、タイマーでセットした時間起きにデータを更新・処理通知するDLL(C)を作りたいと思っています。

    Aにて、Bで作成したexeとCで作成したDLLを参照の追加で参照し、Aの処理内で追加したexeのオブジェクトを生成し、.show()にて呼びだそうと考えています。

    一定の時間起きにCのDLLにてタイマー処理を行ない、Aに対してはこのデータを渡す。Bに対してはこのデータを渡すといった処理を行ないたいと考えています。

    この場合、AとBは同じデータを見たいのですがどういう風に作成すれば実現出来るでしょうか?

    AにてCのDLLも起動しているため、作成したオブジェクトをBのコンストラクタまたはセット用のメソッドを用意して、Bに渡してしまってもいいのかな?と思っているのですが、設計思想的にはあまりよろしくないでしょうか?

    以下に構想ソースを記載します。

    -----A.Project-----

    class a{

    private BPJ.BPJ obj1;

    private CPJ.CPJ obj2;

    void コンストラクタ()

    {

    obj1 = new BPJ.BPJ();

    obj2 = new CPJ.CPJ();

    obj1setPublicProc(ob2);

    }

    }

    ------B.Project----

    class BPJ

    {

    private CPJ.CPJ obj;

    void setPublicProc(CPJ.CPJ c)

    {

      this.obj = c;

    }

    }

    -------------------------------

    よろしくお願いします。

    2014年7月27日 3:52

回答

  • 理屈的に、同一プロセス内では単一のものとして扱うのが妥当な処理なのであれば、Cにて処理するオブジェクトをシングルトンで作成するようにして、データの通知はイベントにする辺りが簡単なところでしょう。

    AとBはぞれぞれ、Cのシングルトンのオブジェクトに対してイベントハンドラを登録するだけです。

    Cはシングルトンのインスタンスが作成されたらタイマーで処理を開始すればよいでしょう。

    ただし、最初の処理と通知を見逃してはならないなど厳密なタイミングの管理が必要なら、イベントハンドラ登録のタイミングと合わせて、条件など含め少し工夫が必要かもしれません。

    • 回答としてマーク mogja 2014年7月30日 14:59
    2014年7月28日 17:49

すべての返信

  • やりたいとされていることがつかめていないかもしれないので確認させてください。

    「A と B は同じデータを見たい」とありますが、これは「A.EXE の中で実行されている B.EXE の部分も同じデータを見る」なのか、「A.EXE とは別に実行されている B.EXE も同じデータを見る」なのか、どちらなのでしょうか。
    後者だとすると、「プロセス」という概念をご理解いただいた上で、プロセス間通信が必要になります。

    2014年7月27日 10:25
    モデレータ
  • 前者となります。

    そのため、A.exeにて生成したオブジェクトを、B.exeの画面を表示する際のコンストラクタにて渡せばいいかなと考えております。

    2014年7月28日 15:51
  • 理屈的に、同一プロセス内では単一のものとして扱うのが妥当な処理なのであれば、Cにて処理するオブジェクトをシングルトンで作成するようにして、データの通知はイベントにする辺りが簡単なところでしょう。

    AとBはぞれぞれ、Cのシングルトンのオブジェクトに対してイベントハンドラを登録するだけです。

    Cはシングルトンのインスタンスが作成されたらタイマーで処理を開始すればよいでしょう。

    ただし、最初の処理と通知を見逃してはならないなど厳密なタイミングの管理が必要なら、イベントハンドラ登録のタイミングと合わせて、条件など含め少し工夫が必要かもしれません。

    • 回答としてマーク mogja 2014年7月30日 14:59
    2014年7月28日 17:49