Bonjour,
C'est la première fois que je viens sur ce forum. J'ai en effet rencontré un petit problème sous Borland C++ 6.0, au moment de l'édition de lien avec une DLL.
Mon projet consiste en :
- un noyau de calcul réalisé au moyen d'une DLL écrite en ADA (GNAT).
- une IHM simple (affichage du courbes, sélection de fichiers) écrite en Borland C++.
Dans le projet, la DLL est tout simplement liée en incluant le fichier ".lib", créé grâce à l'outil Borland "implib". Et au moyen d'un fichier déclarant les fonctions grâce à :
'extern "C" {
float Get_Power(Line);
....
}'.
Jusqu'à présent tout allait bien. Les échanges de données se faisaient correctement. Mais en voulant ajouter une nouvelle fonction à l'interface un phénomène étrange est apparu, au moment de l'édition de lien, la DERNIERE FONCTION dans l'odre ALPHABETIQUE n'était plus vu par le lieur de BORLAND (la 64e fonction exactement). Et le message suivant apparaît : "UNRESOLVED EXTERNAL : _Le_Nom_de_la_64e_fonction".
Ce qui est interressant c'est que :
1) si je rajoute 2, 3 ou 4 fonctions supplémentaires dans la DLL, le même message d'erreur se produit : "UNRESOLVED EXTERNAL : _Le_Nom_de_la_64e_fonction". Or la 64e fonction dans l'ordre alphabétique n'est plus la même bien sûr puisque je viens d'en ajouter d'autres... Ainsi, si j'en rajoute 1 : c'est la dernière fonction par ordre alphabétique, si j'en rajoute 2 c'est l'avant dernière, etc.
2) le compilateur GNAT ne semble pas du tout gêné, Implib ne fait pas d'erreur, et le fichier ".lib", regardé sous NotePad contient bien TOUTES les fonctions...(Ainsi que d'ailleurs bien d'autres fonctions qui ne sont pas dans l'interface)
3) Le phénomène se produit en fait quelque soit le nombre de fonctions réellement attendues par le code en C. Je veux dire que si par exemple je déclare moins de fonctions dans la partie 'extern "C" ', c'est quand même toujours la 64e fonction, par odre alphabétique, exportée à l'interface de la DLL qui fait un problème au moment de l'édition de lien avec Borland.
Quelqu'un saurait-il m'éclairer ?
D'avance merci pour votre aide
Partager