9
votes

C ++: Callback Typedfs avec __stDCall dans MSVC

CEDEDF:

 error C2059: syntax error : '('


0 commentaires

3 Réponses :


0
votes

Un pointeur de fonction doit avoir des informations sur la convention d'appel utilisée par la fonction. Si vous souhaitez désigner une fonction qui utilise la convention d'appel __CDecl, vous devez utiliser un pointeur de fonction __cdecl. Si vous souhaitez désigner une fonction qui utilise la convention d'appel __STDCAll, vous devez utiliser un pointeur de fonction __STDCAll.

J'espère que cela aide.


0 commentaires

14
votes

Je crois que sur VC ++, vous devez mettre la convention appelante à l'intérieur du () 's Voici un Exemple sur MSDN d'utilisation d'une convention appelante à l'intérieur d'un pointeur de fonction Typedf.

typedef DWORD (WINAPI * CM_Open_DevNode_Key)(DWORD, DWORD, DWORD, DWORD, PHKEY, DWORD);


0 commentaires

0
votes

Note latérale: je crois que la signature de la fonction Typeedfs devrait jamais être exprimée comme pointeur Typefs.

Si vous aviez défini cm_open_devnode_key à être non-pointeur, toute déclaration d'en-tête d'une fonction qui doit suivre cette signature de rappel aurait pu simplement avoir été écrite comme

cm_open_devnode_key myfunc;

plutôt que d'une erreur trop verbeuse / ornée d'erreur

DODWOR WINAPI myFuncC (DWORD, DWORD, DWORD, DWORD, FLCEKE, DWORD);

Ceci permettrait à un code beaucoup plus simple et à une correspondance beaucoup plus spécifique des signatures de fonction, si nécessaire.

")).


0 commentaires