J'ai un problème avec une librairie qui est écrite en C et mon propre code en C++, le problème semble être qu'il y a un pointeur de fonction qui est déclaré comme externe "C" mais pointe vers une fonction C++ (dans mon cas le pointeur NULL quand j'appelle la fonction de la librairie) qui n'est pas déclarée externe "C".Extern "C" Pointeur de fonction NULL
maintenant dans le code:
function_from_lib(... , (int (*)()) NULL);
Eh bien là, vous pouvez voir que je passe le functionpointer à la fonction. Le problème est que j'ai besoin d'un pointeur de fonction qui pointe également vers NULL mais la fonction à laquelle les points "NULL" (stupide) doivent être déclarés comme extern "C"
. Est-ce que quelqu'un sait comment résoudre un tel problème ou une solution de contournement? Je n'ai pas la moindre idée de la façon dont la fonction regarde à l'intérieur, mais elle a besoin d'un pointeur de fonction NULL pour ma tâche.
Donc, si je dois passer une autre fonction comme ce qui suit:
extern "C" int fkt()
{
return NULL;
}
il aurait travaillé mais je besoin d'un pointeur de fonction NULL.
EDIT:
Eh bien cela fonctionne:
extern "C" int fkt()
{
return NULL;
}
...
function_from_lib(... , fkt);
Cela ne fonctionnerait pas:
int fkt()
{
return NULL;
}
...
function_from_lib(... , fkt);
Et maintenant je dois passer un NULL functionpointer
function_from_lib(... , (int (*)()) NULL);
et ça ne marche pas travail t parce qu'il n'extern "C"
EDIT2 (MISE À JOUR ERREUR)
ERROR:
argument of type "I32(*)()" is incompatible with parameter of type "I32(*)() C"
S'il vous plaît ajouter un exemple de code plus complet, ce que vous avez essayé et qui ne fonctionne pas – nishantjr
IIRC, 'extern « C »' empêche seulement le nom de la fonction d'être mutilée (C++ est-ce que pour permettre par exemple surcharge de fonction). Cela n'aurait aucun impact sur un pointeur de fonction. Quelle est l'erreur réelle que vous obtenez? – Medo42
Maintenant j'espère que c'est un peu plus clair ce que je veux dire. –