もくじ
目次(WPF/xaml/C#/C++関連メモ) - tera1707’s blog
やりたいこと
コンソールアプリの中にあるメソッドを、exeを実行して動かすのではなく、直接メソッドを外から呼んで動かしたい。
やりかた
Activator.CreateInstance()
を使う。
サンプル
まず、こんな感じでソリューション、プロジェクトを作成する。
- SubConsoleApp.exeの中にあるメソッドを、
- MainConsoleApp.exeが呼びたい。
- ※ClassLibrary1.dllは、dllのメソッドを呼ぶときとの動作比較用。
呼び出す側のコード。
using System.Reflection; //------------------------------------------ // DLL内のメソッドを呼ぶ(動的に) //------------------------------------------ // パスを指定して、dllを呼び出す var asm = Assembly.LoadFrom(@".\ClassLibrary1.dll"); // 名前空間、クラス名を指定して、上のdllの中のクラスを呼び出す var cls = asm.CreateInstance("ClassLibrary1.MyClass1") as ClassLibrary1.MyClass1; // 実行 Console.WriteLine(cls?.MyMethod()); //------------------------------------------ // exe内のメソッドを呼ぶ(動的に) //------------------------------------------ // exeを呼び出す var asm2 = Assembly.LoadFrom(@".\SubConsoleApp.dll"); // exe内のクラスを呼び出す var type = asm2?.GetType("SubConsoleApp.MyClass1"); var obj = Activator.CreateInstance(type) as SubConsoleApp.MyClass1; // 実行 Console.WriteLine(obj?.MyMethod());
呼ばれる、exeの中のメソッド。
namespace SubConsoleApp { public class MyClass1 { public int MyMethod() { return 99; } } }
※SubConsoleAppのメイン関数はなにもしてないので割愛。 ※ClassLibrary1のコードは、以前やったC#のdllの作り方のところと変わりないので割愛。