- PR -

複数プロジェクトでのグローバル変数

投稿者投稿内容
みのひき
常連さん
会議室デビュー日: 2003/07/17
投稿数: 26
投稿日時: 2003-09-17 10:27
お疲れ様です。

質問させてください。

現在VB.NETで開発をしているのですが、
複数のプロジェクト間で共通のグローバル変数の使用は可能でしょうか?

X.slnというソリューションファイルに
a.vbprojとb.vbprojのプロジェクトファイルがあるとして
aとbの両プロジェクトで共通のグローバル変数を宣言する場合、
どこにすればよいのでしょうか?
そもそもこのような使い方は可能なのでしょうか?
Moduleで宣言したものはプロジェクト間ではグローバルになりますが、
他のプロジェクトからは参照できないという状態です。

どなたかご存知の方、よろしくお願いいたします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-09-17 10:47
こんにちは。

 Cというプロジェクトを追加して、A, BからCを参照させる。・・・というのは?A, Bを相互参照させると、参照が巡回しておかしなことになります。

 ただし、A, B共に実行形だった場合、実行中のA, Bで共通に参照するというのは難しいと思います。
みのひき
常連さん
会議室デビュー日: 2003/07/17
投稿数: 26
投稿日時: 2003-12-04 19:00
お世話になります。

以前質問させて頂いてから少し期間はあいてしまったのですが、
再び問題となってきたので、再度質問させてください。

現状は、A(EXE)、B(DLL)の二つのプロジェクトがあり、
一つのソリューションファイルで管理しています。

Aの参照設定にBを指定しているのですが、
AからBを呼び出し、また、
Aで作成したクラスをBで使おうとするのは
やはり相互参照ということになるのでしょうか?

AとBはどうしても切り分けたいのです。

どなたかご存知の方、アドバイスをお願いいたします。
りばぁ
大ベテラン
会議室デビュー日: 2003/11/26
投稿数: 130
お住まい・勤務地: 愛知県
投稿日時: 2003-12-05 09:37
こんにちわ。ぼくはVB.NETは使い込んでないので的外れなこと言ってしまうかも
しれませんが^^;
BのプロジェクトはVB6で言う、AvtiveXDLLみたいなものですかね?
で、Aは普通のEXEですか?

>Aの参照設定にBを指定しているのですが、
>AからBを呼び出し、また、
>Aで作成したクラスをBで使おうとするのは
>やはり相互参照ということになるのでしょうか?

これだけではそもそもAのクラスをBで使用できないと思います。
良いか悪いかは別として、Bの参照設定でAを指定する必要があります。
(=相互参照?
また、Aが普通のEXEだとBでAを参照設定できませんね。(VB6で言う、
ActiveXEXEみたいなものでないと・・)

えと、AとBで共通の変数にアクセスしたいのであれば、
Bあるグローバル変数に対して、Bクラスに設定・取得メソッド
を作って、Aで呼び出せば、共通で使える格好になると思うのですが。

それか、共有メモリ作れば簡単だと思います。

[ メッセージ編集済み 編集者: りばぁ 編集日時 2003-12-05 09:39 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-12-05 12:19
引用:

みのひきさんの書き込み (2003-12-04 19:00) より:

Aの参照設定にBを指定しているのですが、
AからBを呼び出し、また、
Aで作成したクラスをBで使おうとするのは
やはり相互参照ということになるのでしょうか?

AとBはどうしても切り分けたいのです。


 もちろん、相互参照になります。「必要」をたどってみればわかります。Bを正しく動かすためにはAが必要で、Aが正しく動くためにはBが必要で、ではAが動くためにはBが必要なんだから、Bが動くにはAが必要で・・・・・
(VS.NETがコンパイル順を決められずにおかしくなると思います…というスレッドがあったような?)
みのひき
常連さん
会議室デビュー日: 2003/07/17
投稿数: 26
投稿日時: 2003-12-05 12:45
お疲れ様です。

Jittaさん、りばぁさん、返信ありがとうございます。

りばぁさんのおっしゃるように、
私もB(DLL)にプロパティメソッドを設定し、
Aで作成したクラスをセットしていたのですが、
実際に、Bでそのプロパティメソッドを持ったクラス
を参照しようとした場合、インスタンスが生成されていない為、
参照できないようなのです。
ということは、各変数やクラスのインスタンスの有効範囲は
プロジェクト単位であり、ソリューションにある複数プロジェクトでは
参照できないということなんでしょうか・・・。

私がなぜこのようにしているかというと、
現在、あるパッケージを開発しているのですが、
その中で標準部分(共通)とカスタマイズ部分(各エンドユーザごとに
個別の処理)とにプロジェクトをわけ、今後、変更などが発生した場合は
修正したプロジェクトのみをコンパイルし、EXEかDLLを作成・更新したい
と考えているからです。
やりたいことはみやさんの「EXE間のパラメータの受け渡し」と同じです。

そもそも標準部分とカスタマイズ部分でプロジェクトを分けるという
発想が間違っているのでしょうか。

どなたか何かアドバイスなどがあれば、ご教授ください。
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2003-12-05 13:09
みのひきさん、こんにちは。

引用:

私もB(DLL)にプロパティメソッドを設定し、
Aで作成したクラスをセットしていたのですが、
実際に、Bでそのプロパティメソッドを持ったクラス
を参照しようとした場合、インスタンスが生成されていない為、
参照できないようなのです。


この辺、判るような判らないような...。

受け渡すクラスですが、B側でインターフェイスとか抽象クラスとかを定義して、A側でそれを実装・継承するクラスを作成してあげれば良いのではないか、という気がしますが、そういう事ではないんですかね?
りばぁ
大ベテラン
会議室デビュー日: 2003/11/26
投稿数: 130
お住まい・勤務地: 愛知県
投稿日時: 2003-12-05 13:26
こんにちわ。
引用:

私もB(DLL)にプロパティメソッドを設定し、
Aで作成したクラスをセットしていたのですが、
実際に、Bでそのプロパティメソッドを持ったクラス
を参照しようとした場合、インスタンスが生成されていない為、
参照できないようなのです。


きくちゃんさんと同じく、判るような判らないような...。

 Aで作成したクラスをBで呼んでいるということであれば、
無理ですよー。(今までに出てきた相互参照の問題もありますし)
Bのクラスにメソッドを作ってそれをAで呼ぶということは出来るはずです。

 インスタンスが生成されてないうんぬんというのは、A側で
Bを使う部分(インスタンス生成部分から?)が間違ってるような・・

まずは、AでBのインスタンス生成〜メソッド呼び出し部分のソース
でも載せていただいた方が返答される方にも分かりやすいかと。

 と、ここまではいいのですが、DLLに関してですが、例えば
VCなどで作る普通の(?)DLLは、関数単位で完結しているので
グローバル変数は扱うことは出来ません。
 Bで言っているDLLがどういうものか分からないのでなんとも
言えないのですが、もしかするとグローバル変数が使えない
と言うことも考えられますね^^;

スキルアップ/キャリアアップ(JOB@IT)