2017-05-12 2 views
-7

Ich habe ein Problem beim Erstellen einer Instanz einer Assembly einer statischen void Main().Create Instance & Invoke statische Main einer Assembly

Heres ist der Code der Versammlung (.NET Exe)

namespace Test 
{ 
    internal static class Program 
    { 

     [STAThread] 
     private static void Main(string[] args) 

Und hier ist der Launcher-Code: ist ist ein Array von Bytes, die meine Assembly aus der Datei gelesen enthält.

Obj ist immer null und Invoke löst Ausnahme aus, weil der Parameter nicht übereinstimmt.

Antwort

4

Sie kann nicht eine Instanz einer Methode zu erstellen, ist es nur nennen:

Assembly asm = Assembly.Load(bin); 
MethodInfo method = asm.EntryPoint; 
method.Invoke(null, new[] { myParams }); 

Als main ist eine statische Methode, die Sie eine Instanz der Klasse gänzlich verzichtet werden. Deshalb lautet das erste Argument zu Invokenull. Das zweite Argument ist jedoch die Liste der Parameter, die an main übergeben wurden. In Ihrem Fall ist es so etwas wie new object[] { new string[] { "firstArg", "secondArg" } } oder wenn Sie keine Argumente angeben, einfach null.

+0

Ok das ist mir klar, thx. – Julian

+0

Aber es funktioniert nicht mit Argument null. Es wird Ausnahme: Parameter count mismatch – Julian

5

Der Einstiegspunkt einer ausführbaren Datei ist eine Methode, und Methoden haben keine Instanzen, Klassen tun dies.

Also, wenn Sie beabsichtigen, eine Instanz der Main Klasse zu erstellen, sollten Sie die DeclaringType des Verfahrens erhalten:

object obj = asm.CreateInstance(method.DeclaringType.ToString()); 

Aber in diesem Fall, die nutzlos ist, da eine statische Methode ein nicht haben Instanz wird aufgerufen, so die Instanz Weglassen ist alles, was Sie zu tun haben:

method.Invoke(null, null); 

Wenn Sie die Methode mit Parametern aufrufen möchten, stellen Sie sicher, dass Sie einen Eintrag machen pro Argument im Objektarray:

object[] parameters = new object[] { new string[] { "","" } }; 
method.Invoke(null, parameters); 
+0

Wenn ich rufe method.Invoke (null, null); es löst eine Ausnahme aus: Parameter count mismatch Wenn ich rufe object [] args = {new string [] {"", ""}}; method.Invoke (null, args); es wirft: Ziel eines Aufrufs hat eine Ausnahme verursacht. – Julian

+1

Der letzte Fehler bedeutet, dass am anderen Ende etwas schief gelaufen ist. Debug dieses Programm. –

Verwandte Themen