VbNicoG
Messages postés127Date d'inscriptionvendredi 27 juin 2008StatutMembreDernière intervention 6 septembre 2019
-
19 mars 2013 à 19:48
VbNicoG
Messages postés127Date d'inscriptionvendredi 27 juin 2008StatutMembreDernière intervention 6 septembre 2019
-
21 mars 2013 à 09:49
Bonsoir à tous,
J'ai un projet A "windows form" qui contient une classe A.
J'ai un projet B "class library", c'est une interface dll qui sera intégrée dans un autre projet C qui est le projet "maître".
Dans ce projet B, j'ai importé la classe A du projet A (en fait c'est un lien vers cette classe).
J'aimerais rendre visibles toutes les variables de la classe A pour le projet C à travers cette dll.
Jusqu'alors, j'avais créé une nouvelle classe B dans le projet B qui héritait de la classe A et je faisais une copie "à la mano" afin que le projet C y est accès. C'est très lourd!
Donc, j'ai essayé de créer une classe B dans ma dll qui va pointer sur la classe A mais le problème c'est qu'elle n'est plus visible depuis mon projet C car c'est comme ci elle n'appartenait plus à mon projet B mais à mon projet A puisqu'elle pointe dessus.
Existe t'il un moyen plus rusé d'avoir accès aux variables de la classe A dans le projet C à travers cette dll ?
Je ne suis pas sûr que ce soit très clair...j'ai fait au mieux.
Merci d'avance.
A voir également:
La récupération de la fabrique de classes com pour le composant avec le clsid
Une question me vient à l'esprit. Pourquoi n'avoir pas mis ta classe A dans la dll B ?
Ainsi, avec une référence de la dll B dans tes projets A et C, ta classe est accessible dans les deux projets.
VbNicoG
Messages postés127Date d'inscriptionvendredi 27 juin 2008StatutMembreDernière intervention 6 septembre 2019 20 mars 2013 à 18:19
Bonjour,
Merci de ta réponse.
C'est une bonne question, elle me permet de recentrer mon besoin.
En fait, je ne veux pas que cette classe soit instanciée dans le projet C.
J'aimerais que le projet C n'est que accès aux variables de cette classe déjà instanciées dans la DLL.
Je ne vois que 2 solutions :
- Faire une copie de toutes les variables de ma classe dans des variables publiques de ma DLL pour que le projet C y est accès. C'est très lourd...et à chaque évolution du projet A, je dois mettre à jour les variables dans la DLL, j'aimerais que ça se fasse tout seul...
- Sortir toutes ces variables de la classe (il ne restera plus que les fonctions que je ne veux pas exposer) pour les déclarer indépendantes publiques. Ca m'oblige à faire des modifications sur cette classe qui a la base appartient à un projet A bien défini.
Bref, ces 2 solutions ne m'arrangent pas et je me demande s'il n'en existe pas une autre ?
Pour récupérer des variables d'une classe instanciée dans un autre projet, tu peux utiliser le remoting par exemple (voir ici). A serait serveur, C le client et B l'interface.
VbNicoG
Messages postés127Date d'inscriptionvendredi 27 juin 2008StatutMembreDernière intervention 6 septembre 2019 21 mars 2013 à 09:49
Bonjour,
J'ai trouvé une autre solution, j'ai créé une nouvelle classe dans le projet A qui ne contient que les données et une fonction Clone() qui sérialise les données, récupère le flux de mémoire, fais une copie et dé-sérialise les données. Une autre classe hérite de cette dernière et contient les fonctions supplémentaires (classe complète).
Dans ma DLL, je crée une instance de la classe complète.
Dans mon projet C, je créé une instance de la classe qui ne contient que les données, puis j'appelle une fonction de la DLL avec cette classe en paramètre byref.
Dans la cette fonction de la DLL, je fais un clonage de la classe complète vers la classe du projet C.
ça prend une ligne et c'est évolutif : ClassC = ClassA.Clone()