私は、Windowsフォームプロジェクトとクラスライブラリプロジェクトで構成されるアプリケーションを持っています。起動時に、実行可能ファイルはdllに静的な値を設定します。.NET DllまたはExeから実行可能な.NETスタンドアロン実行可能インスタンスにアクセスするにはどうすればよいですか?
using MyClassLibrary;
namespace MyExeApplication
{
public partial class MainForm : Form
{
Hashtable ht = null;
void Form_Load(...)
{
ht = new Hashtable();
ht.add("1", "Open");
ht.add("2", "Close");
Calculate.BasicValues = ht;
}
public Hashtable GetBasicValues()
{
return ht;
}
}
}
namespace MyClassLibrary
{
public class Calculate()
{
public static Hashtable BasicValues {get; set;}
}
}
ここで、アプリケーションがメモリ(実行可能ファイル)で実行されているとします。 私の目的は、別のスタンドアロンアプリケーションを作成し、クラスライブラリの関数Calculateで値BasicValuesを使用することです。
using MyClassLibrary;
namespace TestApplication
{
public partial class MainForm : Form
{
private void TestValueFromDll()
{
System.Windows.Forms.MessageBox.Show("Values of Hashtable");
Hashtable ht = Calculate.BasicValues;
//The hashtable is null and values are not there
//The above will not work. Could I say something like
//Get the running instance of MyExeApplication
//and invoke GetBasicValues() ?
}
}
}
私は私のTestApplicationが実行可能TestApplication.exeが配置されているbinフォルダにMyClassLibrary.dllをコピーしたので、それは動作しませんね。したがって、別のdllが使用されました(最初のアプリケーションMyExeApplicationで使用されたdllではありません)。
私の質問はどうすればこの問題を解決できますか? リフレクションを使用してMyExeApplicationのインスタンスを取得し、そこから値を読み取ることはできますか?他の方法はありますか?
は、あなたが同じフォルダ(プロジェクトのプロパティ]メニューで出力フォルダを設定)にTestApplication、MyExeApplication、およびMyClassLibraryを構築する場合、私はあなたがリフレクションを使用することを避けることができます想像するあなた
私は、あなたがVB 6について話しているようにCOMアウトオブプロセスサーバーのようなものを求めていました。不幸にも、.NETには同等のメカニズムがありません。リモーティングがありますが、それほどシンプルで使いやすいものではありません。 –