- - PR -
System.Reflection.Assemblyについて
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-11-18 12:58
お世話になってます。
皆様のお力を拝借したく書き込みました。 何でも結構です。ご助言いただけると幸い です。 長文になりますがご容赦下さい。 C#でWinアプリを作りました。 app1.exeとします。 app1.exeはコマンドライン引数を受け取ってフォー ム上に表示するだけとします。 app1.exe /A "hoge 1" /B "hoge 2" ↑このように実行されると、app1.exeはフォー ム上のラベルAに"hoge 1"、ラベルBに"hoge 2" と表示します。 もう一つC#でWinアプリを作成しました。 app2.exeとします。MDIです。 app2.exeは、子ウィンドウとしてapp1.exeを 複数表示します。 app2.exeでSystem.Reflection.Assemblyを使っ て下記のように子ウィンドウを作成しています。 ------------------------------------------------- System.Reflection.Assembly ass = null; ass = System.Reflection.Assembly.LoadFrom("app1.exe"); Form childFrm = (Form)ass.CreateInstance("formMain"); // ※ childFrm.MdiParent = this; childFrm.Show(); ------------------------------------------------- ※formMainはapp1.exeフォームのクラス名 このように作成された子ウィンドウ(app1.exe) にコマンドライン引数を渡す事でラベルAとラベ ルBの文字列を動的に変更させたいと思っている のですが、Assemblyオブジェクトに対してコマン ドライン引数を設定する方法が分かりません。 ご存知の方いらっしゃいましたらご教授いただ けますでしょうか。 要点は下記です。 ・MDI子ウィンドウとしてapp1.exeを複数表示する必要がある ・app1.exeには手をいれられない ・app1.exeにコマンドライン引数を渡したい System.Reflection.Assembly以外の方法等もあ りましたらアイデアをいただけると嬉しいです。 よろしくお願いします。 | ||||||||||||
|
投稿日時: 2005-11-18 13:13
Process.Start
| ||||||||||||
|
投稿日時: 2005-11-18 13:37
LoadFrom メソッドはアセンブリを読みに行くだけですので、
実行時に受け取ることができるコマンドラインを渡すことはできません。
悩ましいところですね。 エントリ ポイントでも呼び出して実行してみますか? (w
_________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2005-11-18 13:41
これはapp1のエントリポイントに記述されてるであろうApplication.Runが実行されてしまって不味いんでは。 app1の仕様によるところが大きいですが、app1の実装にべったりな記述をせざるを得ないと思いますねー。 | ||||||||||||
|
投稿日時: 2005-11-18 13:57
はい、かなりまずいですw
うーん...w
[ シグネチャを削除 ] [ メッセージ編集済み 編集者: じゃんぬねっと 編集日時 2006-10-12 11:23 ] | ||||||||||||
|
投稿日時: 2005-11-18 14:34
皆様、早速のお返事ありがとうございます。
Process.Startについてですが、別プロセスの メインウィンドウオブジェクトを取得してMdiParent を設定するといったことができるかですね。 ちょっと調べてみます。 cats様、ありがとうございました。 InvokeMemberでapp1のメンバを取得して直接設定して しまう方法についてですが。。。 一回目のInvokeMemberでエラーが発生してしまいます。 'System.Reflection.TargetInvocationException' のハンドルされていない例外が mscorlib.dll で発生しました。 ただ、方向的にはこれしかないのかなと思い始めてます。 とりあえず動くようにして検討してみます。 じゃんぬねっと様・Hongliang様、ありがとうございま した。 引き続き、アイデア・情報等のご提供をいただけると幸 いです。 宜しくお願いします。 | ||||||||||||
|
投稿日時: 2005-11-18 14:58
自己レスです。
ちょっと方向性を変えて考えています。 System.Environment.GetCommandLineArgs() で取得できるコマンドライン引数を上書きす るような事はできないかと考えています。 app2.exeはFormLoadイベント内で GetCommandLineArgs() を実行してコマンドライン引数を取得・利用 しています。 なので、子ウィンドウ生成前にコマンドラ イン引数を上書きできれば全て問題解決かと 考えました。 GetCommandLineArgs()で取得できる値を上書き するような事は可能でしょうか? 方法がちょっと見当たりません。ご教授いただ けますでしょうか。 宜しくお願いします。 | ||||||||||||
|
投稿日時: 2005-11-18 15:19
その app1.exe にある Form1 のコンストラクタで何やら良からぬ事をやっているのでしょうか? たとえば、コマンドライン引数があることを前提にしてコーディングされているとか... (ない場合の対応ができていないプログラムを、最近見て恐怖を感じましたが) というより手元にソースがないので、
と仰ってるんでしょうか? かなり絶望的ですね... (^-^;) _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |
1