Rekon1602 Geschrieben 16. Mai 2011 Teilen Geschrieben 16. Mai 2011 (bearbeitet) Hallo. Ich hab eine kleines Problem, bei dem ich gerade nicht weiterkommen. Situation: Ich hab einen Ordner, in dem leg in DLL's ab, welche alle über eine bestimmte Funktione "ShowApp" verfügen. Nun möchte ich über alle DLL's in diesem Ordner iterieren und für jede DLL die Funktion "ShowApp" aufrufen. Ich weiß, dass ich über System.Reflection.Assembly.LoadFile(...) an die DLL's rankomm. Über folgengen Code komm ich auch an die Funktion ran: Assembly assembly = Assembly.LoadFile(file); MethodInfo methodShow = assembly.GetTypes()[assembly.GetTypes().Length - 1].GetMethod("ShowApp"); Nur weiß ich jetzt nicht, wie ich die Funktion ausführ Die Funktion methodShow.Invoke(...) will als Parameter 2 Objects, wobei man beim zweiten null angeben kann. Beim ersten will er ein Objekt, wo er es hinspeichern kann. Ich weiß grad aber nicht wie ich das anstellen soll. Was geb ich ihm da mit? Assembly? Oder muss ich in dem Programm, dass die anderen DLL's aufrufen soll, ein Interface oder eine Klasse hinzufügen, welche ebenfalls über die Funktion "ShowApp" verfügt. Hab es jetzt ewig versucht und weiß einfach nimmer weiter. [EDIT] Ich bekomm bei allen Versuchen immer folgende Fehlermeldung: "Object does not match target type." Bearbeitet 16. Mai 2011 von Rekon1602 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 16. Mai 2011 Teilen Geschrieben 16. Mai 2011 Beim ersten will er ein Objekt, wo er es hinspeichern kann. Wie kommst du darauf? Der erste Parameter ist eine Instanz der Klasse welche die Methode bereitstellt. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Rekon1602 Geschrieben 16. Mai 2011 Autor Teilen Geschrieben 16. Mai 2011 Stimmt. Aber dieses Objekt kenn ich nicht zur compilierzeit. Aber ich hab mein Problem mittlerweile gelöst. Falls es jemanden interessiert. Assembly assembly = Assembly.LoadFile(file); dynamic dyn = assembly.CreateInstance(assembly.GetTypes()[assembly.GetTypes().Length - 1].ToString()); Jetzt kann ich dyn so verwenden wie die Klasse, die es zur Laufzeit annimmt. Nur das Intellisense vom VisualStudio funktioniert nicht. Is aber auch klar warum Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 17. Mai 2011 Teilen Geschrieben 17. Mai 2011 Stimmt. Aber dieses Objekt kenn ich nicht zur compilierzeit. Deswegen musst du es zur Laufzeit erstellen. Die Doku gibt da eigentlich immer aufschluss drüber MethodBase.Invoke-Methode (Object, Object[]) (System.Reflection) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Rekon1602 Geschrieben 17. Mai 2011 Autor Teilen Geschrieben 17. Mai 2011 Jupp. Is klar, dass ich dieses Objekt dann zur Laufzeit brauch. Genau darin lag das Problem. Ich wusste/weiß nicht, was für ein Objekt ich benötige. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 17. Mai 2011 Teilen Geschrieben 17. Mai 2011 Na eine Instanz der Klasse die die Methode ShowApp bereitstellt. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.