surcharge de fonctions dans une dll classique, help plz

surcharge de fonctions dans une dll classique, help plz - C++ - Programmation

Marsh Posté le 16-04-2004 à 14:08:52    

Salut a tous.
 
Je debute en C++ je connais que les rudiments du language classique.
hier je me suis lancé sur la creation de dll, j'ai reussit a faire et tester une dll avec plusieurs fonctions sans pb, mais quand j'ai voulu surcharger l'une d'entre elles qui est exporté la j'ai eu une erreure de compile et je n'arrive pas a résoudre le pb.
 
En bref (biensur je simplifie le code au maximum):  
 
dans le header j'exporte les prototypes (je ne sais pas si mes termes sont vraiment exactes)

Code :
  1. string  _stdcall WCHAR2string(WCHAR* textin, string textout);
  2. string  _stdcall WCHAR2string(const WCHAR* textin, string textout);


 
dans le .cpp je defini mes fonctions :

Code :
  1. string _stdcall WCHAR2string(WCHAR* textin, string textout)
  2. {
  3. //blablabla
  4. }
  5. string _stdcall WCHAR2string(const WCHAR* textin, string textout)
  6. {
  7. //blablabla
  8. }


 
et enfin dans mon .dev :

Code :
  1. LIBRARY wcharconvertor
  2. EXPORTS
  3. WCHAR2string


 
et quand je compile tout ca l'erreure est :  
 
LINK : fatal error LNK1152: impossible de résoudre un ou plusieurs symboles non décorés
LINK : fatal error LNK1141: échec lors de la génération du fichier des exportations
 
si je met la definition de l'une des fonctions en commentaire alors l'erreure disparait, je soupsonne tres fortemement mon .dev comme etant la source du pb, en effet comment peux il savoir quel WCHAR2string exporter?
 
si quelqu'un a la moindre info pour me faire avancer...
merci d'avance.

Reply

Marsh Posté le 16-04-2004 à 14:08:52   

Reply

Marsh Posté le 16-04-2004 à 15:42:15    

Pour moi tu ne peux clairement pas surcharger une fonction exportée ...
Donne lui un autre nom ou bien  fait autrement

Reply

Marsh Posté le 16-04-2004 à 16:08:56    

comme il est dit dans l'erreur, "impossible de résoudre un ou plusieurs symboles non décorés"
autrement dit, quand tu fais du c++, les noms de méthodes et fonctions sont "décorés" pour permettre la surcharge et le polymorphisme. Il faut donc exporter le nom décoré.
Ce n'est pas ce qui est fait dans du code purement C, ou la surcharge n'existe pas, et où la docération de nom n'existe donc pas non plus.
 
la façon la plus simple pour savoir quel est ce nom est de faire un autre projets simple qui utilise le header en question, et d'utiliser les méthodes. Ton linker va hurler en disant qu'il ne peut pas résoudre une certains nombres de symboles. C'est ceux-là que tu dois exporter.


Message édité par SoWhatIn22 le 16-04-2004 à 16:10:08
Reply

Marsh Posté le 16-04-2004 à 17:36:26    

ok je crois comprendre ce que tu veux dire tu parle des noms dynamiques données aux fonctions?
 
du style pour la fonction ecrire :  
Ecrire@@YGHXZ
 
et dans mon .dev j'ecris : ecrire = Ecrire@@YGHXZ
 
bon ou a l'ouest?

Reply

Marsh Posté le 16-04-2004 à 18:02:22    

pas sûr de bien te comprendre. Le nom donné aux fonctions n'est pas dynamique, il est établi par le compilateur en fonction de la signature de la fonction (nom de la classe, nombre et type des argumetns, etc...).
En effet, ça ressemble à des trucs du genre ?what@MACLASSE@@QAEXAAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z !!!

Reply

Marsh Posté le 16-04-2004 à 18:05:55    

oui dynamique en fonction de la signature, on est bien d'accord, bon je vais essayer ca merci.

Reply

Sujets relatifs:

Leave a Replay

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