2010-12-09 17 views
0

je utiliser un plugin qui définit un dispositif de réglage de rappel comme ceci:erreur C2440: 'type cast': ne peut pas convertir les 'fonctions de surcharge' à 'vide (__cdecl *) (void)'

extern "C" __declspec(dllexport) void set_callback(void (*fn)(void)); 

et classe appelant plug-in écrit en C++ géré, qui fait référence au rappel:

typedef void (CALLBACK* _set_callback)(void (*fnc)(void)); 

public ref class Caller { 
    static void changeHandler(void); 
} 

void Caller::register() { 
    _set_callback callback; 
    callback((void (__cdecl *)(void))changeHandler); 
} 

Tout fonctionne bien jusqu'à ce que changeHandler(void) est définie comme méthode statique. Comment le changer pour fonctionner avec une méthode non statique?

Répondre

1

Editer: Il semble que j'ai mal compris la question. Compte tenu de la déclaration actuelle de set_callback, vous ne pouvez pas supprimer le modificateur static - qui en ferait une fonction membre (qui nécessite un objet pour fonctionner) et vous ne pouvez pas passer un pointeur de fonction membre à une fonction qui prend seulement un pointeur de fonction normale.

+0

L'échantillon que j'ai donné dans la question fonctionne - je veux juste me débarrasser du modificateur 'static'. – peo

+0

@peo: Malheureusement, cela ne fonctionnera pas avec votre configuration actuelle. – casablanca