Veröffentlicht 16. Mai 201114 j 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 201114 j von Rekon1602
16. Mai 201114 j 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.
16. Mai 201114 j Autor 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
17. Mai 201114 j 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)
17. Mai 201114 j Autor 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.
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.