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 ;-)
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
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
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
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 ?
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 ?
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 ?
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... :(
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... :(
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... :(
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 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 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...)
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.
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...)
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...)