0

実行時に別のアプリケーションから dll をロードしたいのですが、同時に、dll に実装されているクラスのインスタンスを作成する必要があります。それはできますか?実行時に dll を読み込むことができました。いくつかの例がありますが、dll を読み込まずにクラスを呼び出すにはどうすればよいでしょうか? コンパイルされませんよね?

4

2 に答える 2

1

実行時にdllをロードできます。

このような:

//load assembly
var ass = Assembly.LoadFile("ADll.dll");

//get types from assemblt
var typesInAssembly = ass.GetTypes();

var type = typesInAssembly.First(/*select one*/);

//create instance
var object = Activator.CreateInstance(type, new object [] { "arguments" });
于 2013-04-16T07:03:56.730 に答える
1

コンパイルされます。最も簡単な方法は、アプリと読み込まれた dll との共通のインターフェイスを持つことです。これを行うには、ここで見つけることができます: C# - アセンブリをロードし、クラスを見つけ、Run() メソッドを呼び出す正しい方法

ただし、共通のインターフェイスがない場合でもCreateInstance、必要なすべてのメソッドを見つけることができます (以下の例はすべてのメソッド用です)。

MethodInfo[] methodInfos = Type.GetType(selectedObjcClass) .GetMethods(BindingFlags.Public | BindingFlags.Instance);

そして、次Invokeのように使用して、選択したものを呼び出します。

method.Invoke(selectedObjcClass, params...);   
于 2013-04-16T07:03:33.213 に答える