none
別プロジェクトのクラス(オブジェクト)間で情報を共有する方法について RRS feed

  • 質問

  • 複数のことなるプロジェクトからなるソリューションを構成していて、
    その中のメインのプロジェクトがその他のプロジェクトで作成される
    コントロールやクラスのオブジェクトを使っている状態です。

     

    そのメインプロジェクトと各オブジェクトとの間で、なんらかの情報の共有

    を行いたい場合、たとえば、

     

    あるプロジェクトを追加してそこに共有メンバーのフィールドとして

      Public Shared XXX As Boolean

    を書き、このクラスを参照できるようにしたいくつかのプロジェクトの中で
    この共有メンバーを参照、更新することでこの情報をやり取りすること
    ができると考えてよいでしょうか。

     

    実際に試してみましたがこの方法ではTrue/Falseの値の共有は実現

    できませんでした。

     

    Moduleを使うのはVB6以前の方法となるため使用はできるだけしたく

    ないのですが、本件ご指導いただけましたらありがたく。

     

    2007年11月25日 23:42

回答

  • 外池と申します。

     

    ソリューションの構成(複数の異なるプロジェクト)、という切り口で質問を始めておられるので、かえって混乱しているように思いますが・・・、プロジェクトが異なっていようが、同一プロジェクトであろうが・・・、最終的に一つのexeと複数のdllにビルドされるソリューションなんですよね?(この時点で私の理解が間違っていたら、再度、状況を詳しくご説明頂きたいのですが)

     

    だとすれば、単純に「Moduleを用いずに、オブジェクト間で情報を共有する方法はありませんか?」という問いになろうかと思います。

     

    で、私なら、情報共有用のクラスを一つ作って、そこにSharedな変数を用意しますが・・・。で、このクラスが参照できるように、ソリューション内のそれぞれのプロジェクトの参照設定をしてやるわけです。

     

     

     

     

    2007年11月26日 0:16
  • VS2005 初心者さん、こんにちは。

     VS2005初心者 さんからの引用
    これをやったわけですが、どうも、別のプロジェクトの中でこの XXX の値を

    Trueにしても、また別のプロジェクトで見てみると、Falseのままだったのでした。


    本当に Shared メンバに対してのお話であるならそれは絶対ありえないと思います。

    どのようなコードで確認したのか、ミニマム コードを提示してみてください。

    2007年11月26日 1:19

すべての返信

  • 外池と申します。

     

    ソリューションの構成(複数の異なるプロジェクト)、という切り口で質問を始めておられるので、かえって混乱しているように思いますが・・・、プロジェクトが異なっていようが、同一プロジェクトであろうが・・・、最終的に一つのexeと複数のdllにビルドされるソリューションなんですよね?(この時点で私の理解が間違っていたら、再度、状況を詳しくご説明頂きたいのですが)

     

    だとすれば、単純に「Moduleを用いずに、オブジェクト間で情報を共有する方法はありませんか?」という問いになろうかと思います。

     

    で、私なら、情報共有用のクラスを一つ作って、そこにSharedな変数を用意しますが・・・。で、このクラスが参照できるように、ソリューション内のそれぞれのプロジェクトの参照設定をしてやるわけです。

     

     

     

     

    2007年11月26日 0:16
  • 外池様

    ご指導ありがとうございます。

    おっしゃっている状況、その通りです。

     

    >情報共有用のクラスを一つ作って、そこにSharedな変数を用意しますが・・・。

    >で、このクラスが参照できるように、ソリューション内のそれぞれのプロジェクトの参照設定をしてやるわけです。

     

    それで、この方法をやってみた結果がこれでした。

     

    >あるプロジェクトを追加してそこに共有メンバーのフィールドとして

    >  Public Shared XXX As Boolean

    >を書き、このクラスを参照できるようにしたいくつかのプロジェクトの中で
    >この共有メンバーを参照、更新することでこの情報をやり取りする

     

    これをやったわけですが、どうも、別のプロジェクトの中でこの XXX の値を

    Trueにしても、また別のプロジェクトで見てみると、Falseのままだったのでした。

     

    これはもしかすると何か手続きに不足の内容が考えられるでしょうか?

    2007年11月26日 1:08
  • VS2005 初心者さん、こんにちは。

     VS2005初心者 さんからの引用
    これをやったわけですが、どうも、別のプロジェクトの中でこの XXX の値を

    Trueにしても、また別のプロジェクトで見てみると、Falseのままだったのでした。


    本当に Shared メンバに対してのお話であるならそれは絶対ありえないと思います。

    どのようなコードで確認したのか、ミニマム コードを提示してみてください。

    2007年11月26日 1:19
  • そのプロジェクトが二つの exe だったりしたら、プロセスが違うのでそう簡単には共有できませんよ。

     

    2007年11月26日 1:39
  •  囚人 さんからの引用
    そのプロジェクトが二つの exe だったりしたら、プロセスが違うのでそう簡単には共有できませんよ。

    あ、そっちか... なんという勇み足... 
    それだと AppDomain だとかのお出ましなんでしょうね。

    2007年11月26日 1:43
  • 皆様

     

    すみませんでした。申し訳ありません。よくみましたら確かに共有できておりました。

    コードを出す段階でもう一度見てみましたらわかりました!

     

    FormCloseイベントにおいて、

            'DirectoryやFileの操作中は終了できないようにする
            If SharedData.SharedInfo.NowDirFilesCopying  Then
                e.Cancel = True ’<<<---(*1)
                Return
            End If

    こうしておいて(*1)が抜けていて、すり抜けていたのですが、これを試すために

    If 文のところにブレークポイントを立ててそこで値を確認しようとしたところ、そこで

    必ずフリーズして止まり、操作が不能になってしまいタスクマネージャーで終了

    するほかなくなるのでした。何回やってもそうであったため、このNowDirFilesCopying 

    を立てるところでも確認したときも同じ目に遭い、どうもうまくデバッグ状態に入れず

    これはもう共有値が入ってこないのではないかと思い込んでしまいました。

     

    申し訳ありません。

     

    ところで、プロセスが異なる場合でも AppDomain というもので共有が可能になる

    のですか、これもまた勉強してみます。

     

    ありがとうございました!!

    2007年11月26日 2:08