Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

linker + 2 LIB différentes appelant la même DLL

5 réponses
Avatar
poppyto
Bonjour à tous,

J'ai un petit problème avec l'élaboration d'un soft.
Pour faire simple, j'ai une classe A et une classe B.
Cette classe A dépend d'une librairie X version 1 et la classe B d'une
librairie X(donc le même nom que l'autre) mais de version 2.

Tout se passe bien à l'édition des liens car j'ai des .lib différents pour
chaque classe mais lors de l'éxecution....il y a quelques incompatibilitées.
En effets comme il s'agit de la même dll, certaines fonctions ne sont pas
implémentées dans la classe A ou la classe B. Je chercherais donc un moyen
pour que la dll ne soit pas chargées au point d'entrée du programme mais
lors d'un moment précis mais j'aimerais aussi pouvoir conserver mes header
et .lib (afin de pas faire des tartines de GetProcAdress surtout que la
librairie en question ne contient que des objets...).

En vous remerciant d'avance,
Cordialement, Stef++

5 réponses

Avatar
Jean-Marc Molina
Bonjour Stef,

Si A dépend de X1 et B de X2, il faudrait que A dépende aussi de X2. Une
même bibliothèque (pas librairie) est censée être "backward compatible"
après tout. Donc tu devrais pouvoir utiliser les classes X1 de X2.

De quelle bibliothèque parles-tu ?
Pourquoi A dois-elle obligatoirement utiliser X1 ? Ne peut-elle pas faire
appel à X2 ?

JM
Avatar
Stéphane GRAZIANO
Il s'agit d'Oracle...et j'aimerai bien que mon soft marche pour la version
7.3 et la version 8.1.
Dans la version 7.3 j'ai cette déclaration

oresult Open(const ODatabase &odb, const char *sql_statement,
long options = ODYNASET_DEFAULT);

et dans la version 8.1 j'ai cette déclaration

oresult Open(const ODatabase &odb, const char *sql_statement,
long options = ODYNASET_DEFAULT, OSnapshotID *snapID = NULL);

Si l'utilisateur a la version 8.1 il n'a pas la déclaration de la 7.3 et le
prog plante dès le démarrage...
Je pense qu'il y a des trucs à faire au niveau des API mais je ne sais pas
trop par où commencer.

Est-il possible de décharger une DLL au démarrage de l'application puis de
la recharger plus tard ? (tout en gardant mes .lib car comme je le disais je
ne veut pas faire du GetProcAdress)

Merci d'avance
Stef++
Avatar
Stéphane GRAZIANO
Bon ba j'ai trouvé un truc :o)

Pour la version debug :
Il faut que je mette la dll en delayLoad au linkage :
/delayload:oraclm32.dll
plus ajouter Delayimp.lib dans la liste des librairies
plus cocher "File force output" dans les options.
Pour la version Release:
Rien du tout ça marche :o)

En fait on pourrait ne pas avoir à faire ça pour la version debug en
décochant
"Generate debug info"

Voilà ça sera peut-être utile un jour pour quelqu'un....

Cordialement,
Stef++
Avatar
Jean-Marc Molina
Dans ces cas là je wrappe tout ça dans un beau paquet de classes et
j'utilise des defines pour contrôler l'inclusion de certaines classes. Dans
ton cas je verrai quelque chose comme ClasseOpen73 et ClasseOpen81. C'est
juste pour l'idée, cette technique est utilisé par MS DirectX. Ça permet de
compiler un jeu écrit en DirectX 5 sous le SDK de DirectX 9. Désolé je parle
de quelque chose que je connais :). Je ne suis pas certain que la
comparaison soit valable ici mais elle ne me semble pas si mauvaise.

Sinon pour Oracle, s'il s'agit d'une API ou d'un SDK à télécharger (je pense
au framework de .NET par exemple), pourquoi te soucier qu'un client ait la
7.3 ou la 8.1 ? Tu peux les obliger à téléchager la dernière mise à jour des
pilotes ou autres.

JM

--
Europe > France > Lyon
Clé AntiPourriel : PASUNPOURRIEL (ne pas retirer)
Avatar
Stéphane GRAZIANO
> Dans ces cas là je wrappe tout ça dans un beau paquet de classes et
j'utilise des defines pour contrôler l'inclusion de certaines classes.
Dans
ton cas je verrai quelque chose comme ClasseOpen73 et ClasseOpen81. C'est
juste pour l'idée, cette technique est utilisé par MS DirectX. Ça permet
de compiler un jeu écrit en DirectX 5 sous le SDK de DirectX 9. Désolé je
parle
de quelque chose que je connais :). Je ne suis pas certain que la
comparaison soit valable ici mais elle ne me semble pas si mauvaise.



C'est une possibilitée mais je cherchais un truc de fainéant et je l'ai
trouvé :o)

Sinon pour Oracle, s'il s'agit d'une API ou d'un SDK à télécharger (je
pense
au framework de .NET par exemple), pourquoi te soucier qu'un client ait la
7.3 ou la 8.1 ? Tu peux les obliger à téléchager la dernière mise à jour
des
pilotes ou autres.



certaines fonctions dans oracles ne sont pas ré-implémentées ou alors
différement. Quant à demander au client de changer de version, ça
m'étonenrai qu'ils soient ok vu que nous ne sommes pas les seuls à
l'utiliser....

Merci quand même
Stef++