Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1711 connectés 

  FORUM HardWare.fr
  Programmation
  C

  warning: ISO C forbids assignment between function pointer and `void *

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

warning: ISO C forbids assignment between function pointer and `void *

n°2089789
Noobs69
Posté le 17-07-2011 à 17:58:02  profilanswer
 

Si vous savez comment solutionner ça, je suis preneur :
 
http://www.siteduzero.com/forum-83 [...] rning.html

mood
Publicité
Posté le 17-07-2011 à 17:58:02  profilanswer
 

n°2089795
gilou
Modérateur
Modzilla
Posté le 17-07-2011 à 18:46:09  profilanswer
 

Si tu veux rester en ISO C, il faut caster les appels à dlsym:
http://pubs.opengroup.org/onlinepu [...] dlsym.html
Donc par exemple quelque chose comme  
hook._open = (int (*)(const char *, int , mode_t)) dlsym( RTLD_NEXT, "open" );
hook._close = (int (*)(int)) dlsym( RTLD_NEXT, "close" );
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2089796
gilou
Modérateur
Modzilla
Posté le 17-07-2011 à 18:58:48  profilanswer
 

Mais il y a des problèmes d'indirection dans ton code:
hook._open est un pointeur sur une fonction. Il doit donc être appelé comme (*(hook._open))(...)
Et quand tu fais hook._open( pathname, flags, mode ); il n'y a pas de raison que ça marche, puisque ce devrait être (*(hook._open))(pathname, flags, mode );
et idem pour return hook._close( fd ); ce devrait être  (*(hook._close))( fd );
 
Je vois le même problème dans le code posté dans ton autre sujet:
if ( ! hook._gettimeofday )
hook._gettimeofday = (int (*)(struct timeval *, struct timezone *))dlsym( RTLD_NEXT, "gettimeofday" );
if (test == 0) {
 test++;
 process_run(123);
 test--;
}
ret = wrapper._gettimeofday( tv, tz );
 
Le hook est casté avec une structure d'arguments incorrecte, et si tu utilises la même technique, l'appel au wrapper devrait être  ret = (*(wrapper._gettimeofday))( tv, tz );
 
 
A+,


Message édité par gilou le 17-07-2011 à 19:24:27

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2089799
Noobs69
Posté le 17-07-2011 à 20:15:22  profilanswer
 

Merci à tous pour votre aide.
 
La réponse finale est ici :
http://www.developpez.net/forums/d [...] -and-void/
 
Obsidian est un authentique guru, merci à lui de prendre le temps de faire part de son savoir à des développeurs de mon niveau.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  warning: ISO C forbids assignment between function pointer and `void *

 

Sujets relatifs
DLL et C++Interface VBA/C++
[C++] Extraire images d'un fichier mxf avec MxflibExecution d'une Macro Access a partir d'un code C#
[ C# ] Externaliser fichier resource[C#] Traitement de checkbox ou textbox en boucle
Message erreur: function.opendirerreur dans un programm void après la dernière ligne
ISO-8859-15, utf-8 et mysql [Résolu][flex/bison][résolu] invalid pointer
Plus de sujets relatifs à : warning: ISO C forbids assignment between function pointer and `void *


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR