- PR -

実行中の.NETアプリケーションのクラスのインスタンスを取得するには?

1
投稿者投稿内容
こま
会議室デビュー日: 2003/08/13
投稿数: 2
投稿日時: 2006-10-16 18:36
お世話になっております。

.NET Framework 1.1 で作られたWindowsアプリケーションの連携について悩んでおります。

今、二つのアプリケーション App1 と App2 があり、いずれも .NET で作成されています。

行いたいのは、App1 から App2 を起動し、App1 のあるボタンを押すと、App2 の背景色(BackColor)を変更するといったことです。

App1 から App2 を起動する事は、以下のようにして行うことができました。

// アプリケーションドメインを生成
AppDomain domain = AppDomain.CreateDomain("App2Domain");
// そのドメインでアプリケーションを実行
domain.ExecuteAssembly("C:\TEMP\App2.exe");

ですが、App1 から App2 の Form の BackColor を変更する方法が分かりません。

これを行うには、現在実行中の App2 の Form クラスのインスタンスを取得する必要があるかと思うのですが、その方法を見つける事ができませんでした。

AppDomain.GetAssemblies() でアセンブリ群を取得して、そこから型を取得する事はできると思うのですが、「実行中のインスタンス」となると、そもそも可能なのかどうなのか…。

どなたかご助言いただけるとありがたいです。
どうぞ、よろしくお願いいたします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-10-16 19:04
引用:

こまさんの書き込み (2006-10-16 18:36) より:

ですが、App1 から App2 の Form の BackColor を変更する方法が分かりません。

これを行うには、現在実行中の App2 の Form クラスのインスタンスを取得する必要があるかと思うのですが、その方法を見つける事ができませんでした。


考え方を変えた方が良いかもしれません。

App1 から直接 App2 の Form の BackColor を変更するのではなく、
App1 から App2 に対して 「変えなさい」 と指示して、App2 が自発的に BackColor を変更します。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2006-10-16 19:11
引用:

// アプリケーションドメインを生成
AppDomain domain = AppDomain.CreateDomain("App2Domain");
// そのドメインでアプリケーションを実行
domain.ExecuteAssembly("C:TEMPApp2.exe");

ですが、App1 から App2 の Form の BackColor を変更する方法が分かりません。



ヘルプのアプリケーションドメインの解説の中で触れられているはずですが、アプリケーションドメイン境界を越えて、直接的にクラスメソッドを呼び出したりプロパティ値の取得・設定を行うことは出来ません。

.NET では、アプリケーションドメイン境界を越えた手続き実行を行うための手段として「リモーティング」が提供されているので、ヘルプ他で調べてみてください。


[ メッセージ編集済み 編集者: 渋木宏明(ひどり) 編集日時 2006-10-16 19:12 ]
こま
会議室デビュー日: 2003/08/13
投稿数: 2
投稿日時: 2006-10-17 18:56
じゃんぬさん、渋木さん、お返事ありがとうございます。

「リモーティング」を使用する事で目的の事が行えました。

それから、App1 から App2 を無理やり変更する、というよりも、App2(サーバー) にはあらかじめ「できる事(=インターフェース)」が決まっていて、それを App1(クライアント) から利用する、といった方が自然ですね。
確かに考え方が少々違っていたようです。

Visual Basic 6.0 の「ActiveX EXE」に代わるアプリ連携手法を調査していたのですが、この方法で実現できそうです、もっと .NET Remoting について勉強したいと思います。

この度は大変助かりました、ありがとうございました。
1

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