- - PR -
実行中の.NETアプリケーションのクラスのインスタンスを取得するには?
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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() でアセンブリ群を取得して、そこから型を取得する事はできると思うのですが、「実行中のインスタンス」となると、そもそも可能なのかどうなのか…。 どなたかご助言いただけるとありがたいです。 どうぞ、よろしくお願いいたします。 | ||||
|
投稿日時: 2006-10-16 19:04
考え方を変えた方が良いかもしれません。 App1 から直接 App2 の Form の BackColor を変更するのではなく、 App1 から App2 に対して 「変えなさい」 と指示して、App2 が自発的に BackColor を変更します。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2006-10-16 19:11
ヘルプのアプリケーションドメインの解説の中で触れられているはずですが、アプリケーションドメイン境界を越えて、直接的にクラスメソッドを呼び出したりプロパティ値の取得・設定を行うことは出来ません。 .NET では、アプリケーションドメイン境界を越えた手続き実行を行うための手段として「リモーティング」が提供されているので、ヘルプ他で調べてみてください。 [ メッセージ編集済み 編集者: 渋木宏明(ひどり) 編集日時 2006-10-16 19:12 ] | ||||
|
投稿日時: 2006-10-17 18:56
じゃんぬさん、渋木さん、お返事ありがとうございます。
「リモーティング」を使用する事で目的の事が行えました。 それから、App1 から App2 を無理やり変更する、というよりも、App2(サーバー) にはあらかじめ「できる事(=インターフェース)」が決まっていて、それを App1(クライアント) から利用する、といった方が自然ですね。 確かに考え方が少々違っていたようです。 Visual Basic 6.0 の「ActiveX EXE」に代わるアプリ連携手法を調査していたのですが、この方法で実現できそうです、もっと .NET Remoting について勉強したいと思います。 この度は大変助かりました、ありがとうございました。 |
1