Soyez le premier à donner votre avis sur cette source.
Snippet vu 14 081 fois - Téléchargée 28 fois
// Version longue pour un assemblage qui est externe mais local (.dll) // aucune référence et using n'est nécessaire. Ne marche pas pour // un assemblage dans le gac Assembly v_Assembly=Assembly.Load("Namespace1"); Module v_Module=v_Assembly.GetModule("Namespace1.dll"); Type v_Type=v_Module.GetType("Namespace1." + ClasseConcernee,true,false); MethodInfo v_metInfo=v_Type.GetMethod("Method1"); Object[] v_tabParameters=new Object[] {Liste des paramètres}; v_metInfo.Invoke(v_Type,v_tabParameters); // Version courte pour un assemblage qui est externe mais local (.dll) // aucune référence et using n'est nécessaire. Ne marche pas pour // un assemblage dans le gac Type v_Type=Assembly.Load("Namespace1").GetModule("Namespace1.dll").GetType("Namespace1." + ClasseConcernee,true,false); v_Type.GetMethod("Method1").Invoke(v_Type,new Object[] {Liste des paramètres}); // Version pour un assemblage externe mais référéncé et // avec un using dans la classe en question. // L'avantage de celui-ci est qu'il prend en compte un assemblage local // ou dans le gac. Assembly[] v_CurrentAssemblies=AppDomain.CurrentDomain.GetAssemblies(); // Recherche de l'assemblage que l'ont veut utiliser // parmi les assemblages utilisés actuellement foreach (Assembly v_Assembly in v_CurrentAssemblies) { if ( v_Assembly.FullName.StartsWith("Namespace1") ) { // L'assemblage a été trouvé, execution de notre méthode Type v_Type=v_Assembly.GetType("Namespace1." + ClasseConcernee,true,false); v_Type.GetMethod("Import").Invoke(v_Type,new Object[] {Liste des paramètres}); break; } } // Pour l'assemblage courant // et même nom de namespace Type v_Type=Type.GetType(ClasseConcernee,true,false); v_Type.GetMethod("Method1").Invoke(v_Type,new Object[] {Liste des paramètres});
Malheureusement je ne pense pas que cela puisse marcher sur une dll faite en c++ non .net car les dll .net ont une partie manifest en plus qui permet d'obtenir la liste des méthodes et je pense que System.Reflection se base sur cette partie manifest. Comme elle n'existe pas sur une dll non .net cela me parait logique que tu puisse instancier la dll et logique le fait que cela ne te trouve pas de méthode .NET
Sauf avis contraire car je n'ai pas la science infuse loin de là, pour faire du dynamique sur une dll en c++ il faudra que tu passe par un autre moyen sorry...
Je m'inspire que ce qui est fait ici pour aller chercher des méthodes dans une DLL en C++:est ce compatibles?
J'arrive à créer une instance,trouver le type mais pas de méthode (recherche avec son nom)...des idées?
Bon travail.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.