Maison >développement back-end >C++ >Puis-je instancier une classe au moment de l'exécution en connaissant uniquement sa DLL et son nom de type ?
Chargement dynamique des assemblys et des classes instanciées au moment de l'exécution
Connaissant uniquement le nom du fichier DLL et le nom de la classe, est-il possible d'instancier un objet au moment de l'exécution sans référencer explicitement l'assembly dans le projet ? Cette classe implémente généralement une interface qui permet la conversion de type après instanciation.
Nom de l'assembly : library.dll Tapez le nom : Company.Project.Classname
Aucun chemin de fichier
Ne peut pas être utilisé car il n'y a pas de chemin absolu pour la DLL. La DLL peut être située à la racine de l'application, dans system32 ou dans le GAC. Assembly.LoadFile
Solution
C'est possible. Utilisez pour charger un assembly en mémoire. Ensuite, utilisez Assembly.LoadFrom
pour générer une instance du type souhaité. Utilisez d’abord la réflexion pour trouver le type. Activator.CreateInstance
<code class="language-csharp">Assembly assembly = Assembly.LoadFrom("MyNice.dll"); Type type = assembly.GetType("MyType"); object instanceOfMyType = Activator.CreateInstance(type);</code>
Solution améliorée
Étant donné un nom de fichier d'assemblage et un nom de type, peut être résolu en un type. Cela peut être enveloppé avec un bloc try/catch pour la gestion des erreurs. Si cela échoue, les répertoires dans lesquels d’autres assemblys peuvent exister sont recherchés et les méthodes précédentes sont appliquées si nécessaire. Activator.CreateInstance(assemblyName, typeName)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!