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

Linker dynamiquement sans .def

25 réponses
Avatar
Michaël Monerau
Bonjour,

Je cherche à faire un système de "plugin" pour mon programme.
C'est-à-dire que toutes les .dll dans le répertoire "plugins" de mon
prog doivent être chargées, et doivent présenter une interface définie.

Pour cela, dans le programme principal, je fais un LoadLibrary sur
toutes les dlls. Puis, j'appelle GetProcAddress avec les bons arguments.

Actuellement, je n'ai réussi à faire marcher cela que dans un seul cas :
lorsque j'écris un .def à la main pour les dlls plugin qui disent
exactement quelles fonctions doivent être exportées. Là, GetProcAddress
s'y retrouve.

Maintenant, comme il risque d'y avoir pas mal de fonctions à exporter et
à lier ainsi dynamiquement, j'aimerais me passer de l'étape de la
création du .def. Mais même si je mets un "__declspec(dllexport)" devant
les fonctions à exporter, elles ne sont pas reconnues par GetProcAddress
sans le .def pour linker les plugins...

Tout d'abord, est-ce normal ? Si oui, comment puis-je faire pour éviter
d'avoir à écrire le .def à chaque fois (génération auto ?) ? Je subodore
que cela vienne du name mangling, mais j'attends vos
confirmations/infirmations ;-)

--
Michaël << Cortex >> Monerau

5 réponses

1 2 3
Avatar
Michaël Monerau
Martinez Jerome a écrit :
avec le .def, de la meme maniere.
Mais le name mangling etant different entre les compilo, l'appel d'un
programme ecrit sous BCB plantera si il fait appel a une DLL ecrite en
VC, meme si les .def sont identiques :((

(si c'est faux, je veux la solution!!!)



mmh... Si c'est vrai, c'est que je n'ai pas bien compris l'histoire ^^

Le .def permet bien de définir les symboles qui seront exportés, tels
quels ? Sinon, ça ne changerait rien et les noms seraient toujours
décorés et ça ne résoudrait pas le pb. Or, là, ça marche. C'est donc
bien que ça exporte le nom non-décoré ? A ce moment là, il n'y a pas de
problème. Que le nom non-décoré vienne de VC ou de BCB, si c'est le
même, ça *doit* passer. Non ?
--
Michaël "Cortex" Monerau
http://www.drag-network.com
Avatar
Manuel Leclerc
Michaël Monerau a écrit :

L'intérêt de causer de ça, c'est que c'est ma question
du départ :) Ca décide un paquet de choses pour mon projet,
et je voudrais être sûr de faire le bon choix ;)



Je crois bien que tu a eu une même réponse de plusieurs
personnes différentes : EXE et DLL "plugin" ==> interface
"façon API de l'OS" ==> stdcall et nom pas décoré. Ce qui
n'exclut évidement pas les tableaux de pointeurs de fonctions.

Après si tu veux t'amuser avec le C++, tu peux aussi, tu
fais comme tu VEUX, hein ?
Avatar
Martinez Jerome
Michaël Monerau wrote:

Le .def permet bien de définir les symboles qui seront exportés, tels
quels ? Sinon, ça ne changerait rien et les noms seraient toujours
décorés et ça ne résoudrait pas le pb. Or, là, ça marche. C'est donc
bien que ça exporte le nom non-décoré ? A ce moment là, il n'y a pas de
problème. Que le nom non-décoré vienne de VC ou de BCB, si c'est le
même, ça *doit* passer. Non ?



En fait, je n'ai jamais reussi ecrire une classe dans un .Def, si tu as
un exemple je suis preneur car pour des fonctions c'est simple, meme si
ce n'est pas exactement le meme format de .def entre les compilo, mais
pour les classes... :(
Avatar
Michaël Monerau
Martinez Jerome a écrit :
Michaël Monerau wrote:
En fait, je n'ai jamais reussi ecrire une classe dans un .Def, si tu as
un exemple je suis preneur car pour des fonctions c'est simple, meme si
ce n'est pas exactement le meme format de .def entre les compilo, mais
pour les classes... :(




Je l'ai fait en écrivant ma classe :

"DLL_EXPORT class ..."

mais c'était pour une liaison implicite, et non explicite (.lib, liaison
statique au link). Autrement, je n'ai pas de solution sous la main.

Mais je ne l'utilise plus et préfère largement les solutions avec
interfaces abstraites, qui sont beaucou plus propres à mon goût :) (et
moins sensible aux re-compilations...)


--
Michaël "Cortex" Monerau
http://www.drag-network.com
Avatar
Martinez Jerome
Michaël Monerau wrote:
Mais je ne l'utilise plus et préfère largement les solutions avec
interfaces abstraites, qui sont beaucou plus propres à mon goût :) (et
moins sensible aux re-compilations...)



Peux-tu expliciter? merci.
1 2 3