Et voilà, je me retrouve bloqué sur un problème que j’avais résolu il y a quelques mois de ça mais pour lequel je n’ai pas eu la présence d’esprit de noter la démarche…
Je dispose donc d’un fichier .exp et .lib fraichement générés (je n’ai pas le source, en fait uniquement un .a & un .def à partir desquels j’ai généré ces fichiers), ainsi que d’un .h pour définir les entrées…
Question : Puis-je transformer ça en .dll ? Il me semblait avoir trouvé à l’époque une commande avec le linker pour faire ce boulot, mais impossible de retrouver ça.
Remarque : Je n’y connais strictement queud en compilation de librairie dynamique sous win.
Edit : A priori je me suis over-troué, et il maintenant il me semble plausible qu’il n’y ai pas de soluce pour transformer un .lib en .dll, à croire que c’était la même conclusion à laquelle j’en étais arrivé il y a quelques mois.
Ah, un peu à la bourre, effectivement il n’est pas possible de transformer un .lib en .dll, mais la génération de DLL produit un .lib pour pouvoir linker facilement avec un projet utilisant la dite DLL.
[quote name=‘Styx31’ date=’ 31 Aug 2005, 17:31’]Et voilà, je me retrouve bloqué sur un problème que j’avais résolu il y a quelques mois de ça mais pour lequel je n’ai pas eu la présence d’esprit de noter la démarche…
Je dispose donc d’un fichier .exp et .lib fraichement générés (je n’ai pas le source, en fait uniquement un .a & un .def à partir desquels j’ai généré ces fichiers), ainsi que d’un .h pour définir les entrées…
Question : Puis-je transformer ça en .dll ? Il me semblait avoir trouvé à l’époque une commande avec le linker pour faire ce boulot, mais impossible de retrouver ça.[/quote]
Bien sûr, il te suffit de créer une DLL qui interface le lib et linker statiquement le lib dans ta DLL (d’ailleurs je ne pense pas que tu puisses linker autrement que statiquement, mais bref).
En gros tu prends les fonctions de ton .h et tu rajoutes un __declspec(dllexport) devant. Dans le .h utilisé par la fonction utilisant la DLL tu fais __declspec(dllimport). Je te conseille de plutôt faire du stdcall (WINAPI) pour la convention de passage de paramètres, au besoin fait des wrappers. Normalement le compilateur devrait t’optimiser tout ça et tu devrais avoir très peu d’instructions en plus (voire pas).
J’ai réussi depuis à remettre la main sur les dll déjà compilées, mais effectivement, la seule solution semblait être de créer une nouvelle dll linkant le .lib et faire un entrypoint pour ma dll ainsi qu’une export/import des fonctions de ma lib.