[C++] Utilisation de librairies statiques VC++ sous Builder C++

Utilisation de librairies statiques VC++ sous Builder C++ [C++] - C++ - Programmation

Marsh Posté le 11-02-2004 à 17:16:09    

Bonjour,
 
J'ai un gros problème, je dois utiliser des libraries statiques faites sous VC++ (que je ne peux pas modifier et dont je n'ai pas les sources) sous Builder C++.
Je sais que pour les dll faites sous VC++, il existe un outils pour les convertir au format Builder C++, mais pour les lib statiques, est-ce qu'il existe un moyen?  :??:  
 
Merci par avance de vos réponses,
KPTN


---------------
"il n'y a que deux choses qui sont infinies, l'univers et la betise humaine ... et encore pour l'univers je n'en suis pas sûr !!!" Einstein
Reply

Marsh Posté le 11-02-2004 à 17:16:09   

Reply

Marsh Posté le 11-02-2004 à 21:06:00    

Ce même outil ne fonctionne pas ?


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 12-02-2004 à 09:22:12    

En fait, cet outil converti le fichier .lib d'une librairie dynamique d'un format coff (utilisé par vc++) en un format omf (utilisé par Builder). Cependant, cet outil ne converti que les entêtes... donc, si l'implémentation des méthodes se trouvent dans le même fichier (comme c'est le cas pour une lib statique) ces données ne seront pas recopiées...


---------------
"il n'y a que deux choses qui sont infinies, l'univers et la betise humaine ... et encore pour l'univers je n'en suis pas sûr !!!" Einstein
Reply

Marsh Posté le 14-02-2004 à 09:09:51    

Citation :

En fait, cet outil converti le fichier .lib d'une librairie dynamique d'un format coff (utilisé par vc++) en un format omf (utilisé par Builder). Cependant, cet outil ne converti que les entêtes... donc, si l'implémentation des méthodes se trouvent dans le même fichier (comme c'est le cas pour une lib statique) ces données ne seront pas recopiées...


Que veux-tu dire ?
Sous VC++, la différence entre lib statique et lib dynamique est une option de compilation.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 17-02-2004 à 09:54:56    

Coff2Omf (l'outils en question) ne converti pas les dll d'un format à l'autre, mais la lib associée à cette dll (créée automatiquement lors de la création de la dll, ou recréabble avec implib). Or cette lib associée ne contient que les entêtes des fonctions de la dll. Coff2Omf va donc convertir cette lib du format coff au format omf. Et cette nouvelle lib va toujours aller pointer vers les méthodes de la dll associée. Pour une lib statique (ne possédant pas de dll associée, donc) tout le code est dans la lib. Or Coff2Omf va générer un nouveau fichier possédant les entêtes de la lib, mais ne récupérera pas le code associé...
Je ne sais pas si c'est beaucoup plus clair maintenant, mais bon déjà, si tu as une idée de la méthode à utiliser pour convertir une librairie statique en une librairie dynamique lorsque l'on ne possède pas le code, ça m'arrangerait :)
D'ailleurs ça me fait penser que j'avais pas précisé ça (d'où p-ê ta question), cette lib statique m'a été fourni, ce n'est pas moi qui l'ait compilé, donc je ne possède pas le code... d'où mon problème...


---------------
"il n'y a que deux choses qui sont infinies, l'univers et la betise humaine ... et encore pour l'univers je n'en suis pas sûr !!!" Einstein
Reply

Marsh Posté le 17-02-2004 à 10:36:26    

question ptet conne:
 
et cette lib y'a pas moyen de la convertir en DLL, en recréant un point d'entrée de DLL dans VC++, et ainsi utiliser la DLL via le nouveau .LIB associé repassé à travers Coff2Omf ?
 
je sais pas si j'ai été clair...

Reply

Marsh Posté le 17-02-2004 à 15:41:36    

ben en fait, ct mon idée première. Mais recréer les points d'entrées, c pas si facile, surtout que la lib est importante (pour une ordre d'idée j'en ai 2 bien gros avec plus de 5000 lignes d'entête chacunes...) dc je me vois assez mal me refaire un fichier de 5000 points d'entrée et comme des prog genre impdef ne fonctionnent qu'avec une dll, je vois pas bcq d'autre moyen que de le faire à la main.
Si qq'un a une idée à me proposer, elle est la bienvenue :)


---------------
"il n'y a que deux choses qui sont infinies, l'univers et la betise humaine ... et encore pour l'univers je n'en suis pas sûr !!!" Einstein
Reply

Marsh Posté le 17-02-2004 à 17:05:53    

y'a moyen d'avoir le listing des fonctions de la lib je suppose ?
 
donc ptet créer un prog qui te régénère ça automatiquement :D

Reply

Marsh Posté le 18-02-2004 à 16:50:14    

j'aimerais bien... mais je peux pas faire un dump des exports vu que pour une lib statique, les class et les méthodes globales ne sont pas exportées... :(
Donc si t'as un moyen, ça m'intéresse ^^
Pour le moment, le seul moyen que j'entrevois, c'est de déclarer en export toutes les class et les méthodes dans les headers... mais là, ça risque de faire bcq de boulot...
Et en plus pour le moment ça marche pas... Argghh, j'commence à saturer moi... j'crois que je vais me faire une pause ^_^


---------------
"il n'y a que deux choses qui sont infinies, l'univers et la betise humaine ... et encore pour l'univers je n'en suis pas sûr !!!" Einstein
Reply

Marsh Posté le 18-02-2004 à 18:09:34    

:(

Reply

Marsh Posté le 18-02-2004 à 18:09:34   

Reply

Marsh Posté le 18-02-2004 à 21:43:03    

Citation :

Pour le moment, le seul moyen que j'entrevois, c'est de déclarer en export toutes les class et les méthodes dans les headers... mais là, ça risque de faire bcq de boulot...


J'avais fais un petit soft pour cela une fois, Ca rajoutait "MYLIB " devant chaque déclaration de classe. c'est facile et rapide à faire, tu lis les lignes et si y'en a une qui commence par "class Bidule" hop ça devient "class MYLIB Bidule". Faut aussi rajouter un include au début :
#include "mylib_config.h" où tu défini MYLIB du genre :

Code :
  1. #ifdef MYLIB_EXPORT
  2. #define MYLIB __declspec( dllexport )
  3. #else
  4. #define MYLIB __declspec( dllimport )
  5. #endif


Je t'aurais bien filé mon code mais je le retrouve pas, je crois que je l'ai paumé. Mais c'est vite fait.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 19-02-2004 à 10:13:34    

Merci HelloWorld, mais c'est vrai que c assez facile à faire, ça ne me prendra pas trop de temps.
Par contre, hier j'ai aussi pensé à ta solution, et je pense qu'il me faudra bien passer par là à un moment où un autre, mais voilà, j'ai trouvé un nouveau soucis : soit tu as l'implémentation des classes et auquel cas elles seront bien exportées (ce qui n'est pas mon cas), soit tu dois faire un appel explicite aux méthodes de la classe... et là c franchement le bordel. A moins qu'il existe un moyen de faire dire au compilo que l'implémentation des classes se trouve dans la lib statique et qu'il doit aller toutes les chercher, ça serait cool, mais ça je sais pas si c'est faisable et si ça l'est, je ne sait pas comment on fait.


---------------
"il n'y a que deux choses qui sont infinies, l'univers et la betise humaine ... et encore pour l'univers je n'en suis pas sûr !!!" Einstein
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed