- PR -

クラスライブラリを別プロセスで動作させる。

投稿者投稿内容
パンダ
ベテラン
会議室デビュー日: 2004/03/24
投稿数: 59
投稿日時: 2004-04-22 14:20
C#において以下のような4つのプロジェクト構成で開発しています。
1.メニュー Windows アプリケーション
2.画面A クラス ライブラリ
3.画面B クラス ライブラリ
4.処理C クラス ライブラリ

メニュー画面は画面A、画面B、処理Cのクラスを呼びます。
画面A、画面Bは画面(フォーム)があるプロジェクトです。
処理Cは画面(フォーム)がないプロジェクトです。

上記の画面A、画面B、処理Cのクラスの実行をメニューに対して、
別々のプロセス(アウトプロセス)で実行させたいと考えています。
可能でしょうか?

別々のプロセスで動作させたい理由は
1.画面A、画面B、処理Cを別々に動作させるため、1つの
 処理が異常終了しても他の影響しないため。
2.メニューだけを終了させたいため。
 今はメニューを終了させると画面A、画面B、処理Cも終了して
 しまう。

全てをWindows アプリケーションで作成する方法もあるのですが
画面同士の連携を考えて、メニュー以外はクラスライブラリの
構成にしたいと思います。

何かいい方法はないでしょうか?

VB6のActiveXDLLのようなアウトプロセスサーバって作れない
のでしょうか?

よろしくお願いします。
tricolo
会議室デビュー日: 2004/04/11
投稿数: 4
投稿日時: 2004-04-23 00:50
こんにちは。
求めている物とはだいぶ違うかもしれませんが、
「1.メニュー Windows アプリケーション」(EXE)を
パラメータつきで呼び出すように変更すればいいのではないでしょうか。
もしくは、DLLのものをすべてをEXEで作ってしまえば、
条件はクリアできるようにも思えます。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-04-23 08:21
引用:

パンダさんの書き込み (2004-04-22 14:20) より:

全てをWindows アプリケーションで作成する方法もあるのですが
画面同士の連携を考えて、メニュー以外はクラスライブラリの
構成にしたいと思います。


 マネージドアセンブリなら、実行形式でもDLLのように参照できます。
パンダ
ベテラン
会議室デビュー日: 2004/03/24
投稿数: 59
投稿日時: 2004-04-23 10:25
引用:

Jittaさんの書き込み (2004-04-23 08:21) より:
引用:

パンダさんの書き込み (2004-04-22 14:20) より:

全てをWindows アプリケーションで作成する方法もあるのですが
画面同士の連携を考えて、メニュー以外はクラスライブラリの
構成にしたいと思います。


 マネージドアセンブリなら、実行形式でもDLLのように参照できます。



マネージドアセンブリについて調べてみたのですが、イマイチ、実行形式でも
DLLのように参照するやり方が分かりませんでした。
具体的な方法か参考になるHPがあれば教えて頂けないでしょうか?
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-04-23 10:49
こっちのスレッドを参考にして、動的にバインドします。

コード:

Private Sub MenuItem1_Click(ByVal sender As Object _
, ByVal e As System.EventArgs) Handles MenuItem1.Click

Dim a As System.Reflection.Assembly
Dim ap As String = System.IO.Path.Combine( _
System.IO.Path.GetDirectoryName(Application.ExecutablePath) _
, "WindowsApplication1.exe")
a = System.Reflection.Assembly.LoadFile(ap)
Dim af As Object = a.CreateInstance("WindowsApplication1.Form1")
af.Show()
End Sub



すみません、何か勘違いして、VS.NETのソリューションエクスプローラから参照できる、という意味でコメントしてましたが、それは出来ませんでした・・・って、前にもそのようなことを書いたような

[ メッセージ編集済み 編集者: Jitta 編集日時 2004-04-23 10:51 ]
パンダ
ベテラン
会議室デビュー日: 2004/03/24
投稿数: 59
投稿日時: 2004-04-23 11:39
引用:

Jittaさんの書き込み (2004-04-23 10:49) より:
こっちのスレッドを参考にして、動的にバインドします。




C#で開発しているのですが、C#って動的にバインドできるのでしょうか?
C#で動的にバインドできなかったらEXEをDLLのように呼び出すのは無理
なのでしょうか?

小野@どっとねっとふぁん
ぬし
会議室デビュー日: 2001/10/30
投稿数: 402
投稿日時: 2004-04-23 11:46
Jittaさんが提示している方法だと、同じアプリケーションドメイン内で
画面を動作させることになりますよね。
この方法では元質問者の方の
「1.画面A、画面B、処理Cを別々に動作させるため、1つの
  処理が異常終了しても他の影響しないため。 」
この要件が満たせないよーな。

#2のメニューだけ終了も無理かな?

画面同士の連携というのが何をさせたいかにもよるのですが、
すべての画面を実行形式で作成し、Process.Startを使って
各画面を起動するのが一番要件に合うような。

画面間でデータの受け渡しがある場合はDBとかファイル経由で
やるようになるかなぁ。
パンダ
ベテラン
会議室デビュー日: 2004/03/24
投稿数: 59
投稿日時: 2004-04-23 12:26
引用:

小野@どっとねっとふぁんさんの書き込み (2004-04-23 11:46) より:
Jittaさんが提示している方法だと、同じアプリケーションドメイン内で
画面を動作させることになりますよね。
この方法では元質問者の方の
「1.画面A、画面B、処理Cを別々に動作させるため、1つの
  処理が異常終了しても他の影響しないため。 」
この要件が満たせないよーな。

#2のメニューだけ終了も無理かな?

画面同士の連携というのが何をさせたいかにもよるのですが、
すべての画面を実行形式で作成し、Process.Startを使って
各画面を起動するのが一番要件に合うような。

画面間でデータの受け渡しがある場合はDBとかファイル経由で
やるようになるかなぁ。





でもそれをするとオブジェクトプログラミングって
感じがなく、少し抵抗があるんです

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