- - PR -
複数プロジェクトでのグローバル変数
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2003-12-05 13:41
こんな感じ?
http://quick-tips.hp.infoseek.co.jp/vs.net/tip.html 一番下のリンク(広告ではない)をダウンロードして解凍。 | ||||
|
投稿日時: 2003-12-05 15:14
相互依存しているものを別プロジェクトにする事が間違っていると思います。
| ||||
|
投稿日時: 2003-12-05 16:49
ども、ほむらです。
個人的に思うに A=メインフレーム B=プラグイン 見たいな関係かなと思いました。 この図式でよいのであればきくちゃん氏の言うような作り方に一票ですね。 グローバル変数を作成するのでなくて 両者の橋渡しをするためのクラスCを作って それをパラメータにすればよいのではないでしょうか? クラスCも別プロジェクトにしてAとBでプロジェクト単位で 依存関係の設定する必要があります。 #TLSAlloc()を使えばDLLを介したグローバル変数っぽいものもつくれますけど #.NETで作るのならWIN SDKはあまり使かわない方がよいかと。。 | ||||
|
投稿日時: 2003-12-05 17:27
お疲れ様です。
るぱんです。 役割考えてみたんですが、間違ってたらゴメンナサイ。 詳しい人にコメント貰えると嬉しいです。 結論から申し上げると、 Grobal変数反対です。 Scope考えないでいるとそういう作りなのが楽なのはわかるんですが、 修正が入った時に泡吹きそうになるのでは・・・? EXE プログラム DLL プログラムから参照を受けるAPI集のような存在 とするなら、 汎用関数はDLLに突っ込んで、EXEによって使い分ける・・・方がよいかと・・・。 DLLの中でグローバル変数許すと言う意味がわかってないです。 引数にしていちいち渡して行ったら駄目なんでしょうか? あと、Grobal変数はIntegerとかString型とかなんでしょうか? 物によると思うんですが・・・? | ||||
|
投稿日時: 2003-12-05 19:48
#いまいち何をしたいのか良く掴めないので。。。
少し確認なのですが、やりたいことは、プロジェクト A で持っている値を プロジェクト B に渡して使いたい、ということであっていますよね? それとも、プロジェクト B からプロジェクト A の処理を呼び出したいのでしょうか? #プロジェクト A のクラスをプロジェクト B に渡して、 #それを使いたそうな気がしたので。。。(気のせいかも知れませんが) 前者であれば、きくちゃんさんやほむらさんがおっしゃっているような方法で 作るといいと思います。 #そんなに難しいことではないと思うのですが・・・。 もし後者だとするなら、デリゲートを使うのが一般的ではないでしょうか? [ メッセージ編集済み 編集者: 架空兎 編集日時 2003-12-05 19:51 ] [ メッセージ編集済み 編集者: 架空兎 編集日時 2003-12-05 22:27 ] | ||||
|
投稿日時: 2003-12-06 21:54
やっぱり、情報が少なすぎますね。プロジェクトAとプロジェクトBの位置関係も気になります。プロジェクトAがノータッチデプロイされたアプリケーションでプロジェクトBがローカルに保存してあるなら、呼び出しできないように思いますし、気にされていないようですが、それぞれのアセンブリのバージョン番号も気になります。厳密名が与えられていなければ、バージョン番号の違いはパスされるのかな?(この辺、まだ詳しく見ていないので詳細不明)
> 私がなぜこのようにしているかというと、 > 現在、あるパッケージを開発しているのですが、 > その中で標準部分(共通)とカスタマイズ部分(各エンドユーザごとに > 個別の処理)とにプロジェクトをわけ、今後、変更などが発生した場合は > 修正したプロジェクトのみをコンパイルし、EXEかDLLを作成・更新したい > と考えているからです。 みやさんのほうで小野さんが言われている「モジュールで分ける」と言うことがVS.NETのIDEでできるなら、そうするのがいいのでしょうね。 で、おっしゃっていることを「実装」する間に、もっと「設計」をきちんと行わなければならないでしょう。そこの詰めが甘いと思います。プロジェクトに分ける分けないはともかく、エンドユーザによる違いがある箇所は、「ここが違う」というのがすでに明確されているのであれば、他の部分から完全に独立させるべきです。この部分が他のプロジェクトを参照しても、他のプロジェクトがこのプロジェクトを参照するような作りにはしてはいけません。そのためにはインタフェースをしっかりと設計し、インタフェースを定義して、インタフェースを実装したクラスを作成し、インタフェースを介してデータのやりとりをするべきです。C#であれば、デリゲート(処理の委任)が使えるのかもしれません。 | ||||
|
投稿日時: 2003-12-07 00:25
>C#であれば、デリゲート(処理の委任)が使えるのかもしれません。
VB.NET でもデリゲートは使えますよ。 # C# とは多少やり方は違いますが。。。 | ||||
|
投稿日時: 2003-12-07 15:31
1プロジェクト1アセンブリ(EXE or DLL)だと思いますが、 DLLやEXE間をまたがってグローバル変数を持つというのは普通しないと思います。 グローバル変数の値がいつ、どんな風に変更されるのかはブラックボックスのため、 個々のアセンブリが別々に開発されるとすると現実的な方法ではないからです。 各プロジェクトを分散して開発するのでなければ、プロジェクトを分けなければいいわけですし。 他の方も書かれているようにプロジェクト間のインタフェースとなる メソッドの引数や戻り値、イベントの引数で受け渡しするのがよいと思います。 [ メッセージ編集済み 編集者: よねKEN 編集日時 2003-12-07 15:33 ] |