Pourquoi ? Je comprends que ca ne sente pas bon dans le cas d'utiliser une méthode identique, il est inutile de la dupliquer, cependant si il est nécessaire de la modifier je ne comprends pas mes autres options
Exemple:
int add(int a, int b) {return a + b;}
Pour implémenter "add(int, int, int)", on ne va pas faire un copier-coller la la fonction "add".
int add(int a, int b, int c) { return add(a,b) + c;}
Ainsi, en cas d'optimisation de "add(int,int)" ou correction de bug, "add(int, int, int)" en bénéficiera automatiquement.
Exemple totalement arbitraire et artificiel, mais comme le dit l'adage, il n'y a que du mauvais code qui se copie-colle.
sachant que c'est un logiciel open source,
Je ne vois pas ce que cela change au "débat", sauf que vous pourriez nous indiquer le projet et la fonction pour avoir le cas concret du "problème".
je ne peux pas me permettre de modifier des méthodes d'une dll qui sert a d'autres fonctionnalités,
Et pourquoi ? si vous étendez/amélioré la dite fonction ? Cf. mes remarques sur les tests unitaires.
et si je souhaite utiliser cette méthode sous forme dérivé je n'ai pas le droit de la copier et de la modifier selon mes objectifs ?
Si les extensions ne se servent que pour vous, vous devriez utiliser les fonctions Open source pour implémenter vos fonctionnalités, pour bénéficier automatiquement des améliorations et correction de bugs de celles-ci.
DLL2 dépend de DLL1 , DLL1 peut dépendre de DLL2 apparement selon vos informations mais dans mon cas c'est trop complexe pour l'objectif souhaité (recuperer un entier), de plus cette question ne se pose plus car je souhaite modifier la méthode
La mise en forme du post a complétement écrasé mon "dessin".
|
EXE
|->DLL1->DD2
|->DD2
L'exe dépend de DLL1 et de DLL2, DLL1 dépend de DLL2.
de plus cette question ne se pose plus car je souhaite modifier la méthode.
Vous vous contredisez. Vous ne voulez pas toucher au code origine, vous le copié dans votre projet, mais vous souhaitez "modifier" la fonction ?
C'est pas cohérent. Soit vous la modifié pour la corrigé ou l'étendre soit vous vous vous en servez comme base et vous n'avez pas à la modifier.
Le plus simple et concret, c'est de nous montrer la fonction que vous voulez "récupérer" et l'action que vous voulez faire, pour vous indiquer une marche à suivre plus pérenne que celles que vous semblez vouloir prendre.
Je ne comprends pas ce que vous entendez par architecture de votre projet.
Un projet a toujours une architecture, qui permet plus ou moins simplement d'être maintenu et étendu.
Si cela ne vous dit rien, c'est que vous n'avez pas assez analysé le projet de base.
je dois y ajouter une fonctionnalité,
Quel est la portée de cet ajout ?
patch ? extension "technique" ? extension "fonctionnelle" ? etc...
pour la réalisation d'une partie de mon programme une méthode existe deja dans le logiciel mais elle ne colle pas exactement a mon objectif
Soyez plus concret, SVP ?
je dois donc la modifier.
NOPE, on n'ai jamais obligé de modifier du code existant sans bug connu.
Donc je me sers de la méthode de base (présente dans le code source) afin de la modifier selon mes objectifs, mais "ca ne sent pas bon".
Le plus pérenne, n'est pas de modifier la méthode, mais de vous en servir pour implémenter la vôtre.
je n'ai a priori pas d'autres choix vu mon objectif, je dois donc abandonner ce projet ?
Montrez la méthode initiale et indiquez concrètement vos objectifs.
Vous faites une fixette sur les Dll, mais ce n'est qu'un moyen de distribution de code binaire. Il y a tellement d'autres fonctionnalités d'extension que je ne comprends pas votre fétichisme de la Dll.
Le mode de distribution du code, c'est un détail à faire après analyse et implémentation de l'extension.
Est-ce obligatoire de partager mon ajout ? L'utilisation en local uniquement n'est pas autorisé ? Si elle l'est la question ne se pose plus.
C'est fonction de la licence du projet.
Open Source, cela ne veut pas dire libre de droit, loin de là.
lorsque je voulais créer une dépendance entre la DLL1 et la DLL2 aucun soucis
Soyez plus précis, SVP. Il y a toujours un sens dans la dépendance.
ensuite je voulais en créer une entre la DLL2 et la DLL1 la case était grisé car on aurait "une dépendance circulaire"
Comme c'est un cas d'usage quasi-toujours foireux, votre IDE vous empêche de vous pendre avec ces conneries.
Quel cas d'usage peut-il être légitime de distribution de 2 dll cycliquement dépendante ?
Moins j'en vois aucun, sauf une conception faite avec les pieds.
Si Dll1 a besoin de Dll2 et Dll2 a besoin de Dll1, il ny a pas à tortiller du cu*, vous fusionnez les deux Dll.
le fait que l'attribut de la DLL2
De quel "attribut" parlez-vous ?
que je souhaitais transmettre à la DLL1
On ne transmet rien à une Dll, on ne fait qu'appeler des fonctions ou lire/écrire des champs statiques (et c'est bien cracra dans ce cas).
avait pour but d'etre utiliser dans une méthode de la DLL1 que j'utilisais deja dans ma DLL2
C'est donc une fonction de DLL2 qui dépend d'une fonction de DLL1, donc c'est DLL2 qui dépend de DLL1 (en espérant qu'il n'y pas de lien d'en l'autre sens => fusion des DLL pour cacher ce bordel au reste des projets qui n'ont pas à connaitre ce merdier).
du coup l'exe pour charger la DLL1 a besoin que la DLL2 soit chargé et vice versa du coup ca tourne en rond
Vous n'avez pas lu attentivement ma réponse, il n'y aura jamais de cycle car le loader fait le travail en plusieurs passes.
et les dll sont elles toujours liées statiquement ?
La majorité du temps. Sinon, c'est le DelaiLoading ou le chargement à la main, avec "LoadLibrary".
Pour moi elles l'étaient dynamiquement d'ou mon "ancien problème"
Cela ne change rien, que le chargement soit statique ou dynamique, le Loader fait son taf et "gère" les cycles (qui ne devraient JAMAIS exister).
Partager