|
■No40626 (なちゃ さん) に返信
■No40625 (よねKEN さん) に返信
なんとか無事に呼び出すことができました!
かなり厳密にパス指定してあげないとだめなんですね・・・。
よねKENさんの言うとおり入れ子とかよりDLLの呼び出し問題でした。
今まで何も疑うことなくSystem.Mathなどは「GetType("System.Diagnostics.Debug")」だけでAssembly.LoadFromを省いていました。
また、入れ子のパスはなちゃさんの言った通り「+」となっていました。
(テストDLLを作りTypeを直にとって検証)
おかげさまでDLLの呼び出しに成功しました!
質問には書いていませんでしたが、自分自身を文字列から呼び出すことにも成功しました!
が、少々不安が残る仕上がりです・・・。
やっぱりこういった場合にはusing{}などで呼び出し後にobjectを開放とかするべきなのでしょうか?
(自分自身のファイルを自分で読み込むという動作はプログラム的に予期しないことが起こるのではないかと不安)
using System.Reflection;
namespace WpfApplication1
{
/// <summary>
/// Window1.xaml の相互作用ロジック
/// </summary>
public partial class Window1 : Window
{
public Window1() { InitializeComponent(); }
private void Button_Click(object sender, RoutedEventArgs e)
{
Assembly ass = Assembly.LoadFrom(System.Reflection.Assembly.GetExecutingAssembly().Location);
Type testyep = ass.GetType("WpfApplication1.testclass+testchild");
object inst = testyep.InvokeMember(null, System.Reflection.BindingFlags.CreateInstance, null, null, null);
object metho = testyep.InvokeMember("testvoid", System.Reflection.BindingFlags.InvokeMethod, null, inst, new object[] { 1, "!" });
}
}
public class testclass
{
public class testchild
{
public void testvoid(int i, string st) { if (i == 1 || st == "!") { System.Diagnostics.Debug.Print("OK!"); } }
}
}
}
|