2016-01-28 2 views
0

Celui-ci me rend fou. J'ai essayé tout ce que je pouvais penser. Voici les parties pertinentes du code DirectInput.DirectInput Non résolu Symbole externe

BOOL CALLBACK EnumDevicesCallback(const DIDEVICEINSTANCE* DeviceInfo, VOID* Context); 

if(DirectInput8Interface == DI_OK) 
{ 
    DirectInput8InterfacePointer->EnumDevices(
    DI8DEVCLASS_GAMECTRL, 
    (LPDIENUMDEVICESCALLBACKA) EnumDevicesCallback, 
    NULL, 
    DIEDFL_ATTACHEDONLY); 
} 

Lorsque je tente de compiler, je reçois l'erreur:

unresolved external symbol "int __stdcall EnumDevicesCallback(struct DIDEVICEINSTANCEA const *,void *)" ([email protected]@[email protected]@[email protected]) referenced in function [email protected]

Comme vous pouvez le voir, le symbole externe, le compilateur ne peut pas trouver est lié au paramètre DIDEVICEINSTANCE de la fonction EnumDevicesCallback. Cela ne devrait pas être, car j'ai inclus dinput.h et lié à dinput8.lib et à dxguid.lib. J'ai même essayé de définir DIDEVICEINSTANCE dans mon propre code et j'ai reçu un message disant qu'il était en conflit avec une définition précédente.

Que pourrait signifier ce message d'erreur?

+1

Utilisez-vous un compilateur C ou C++? Ils ne sont pas les mêmes. –

+1

Copie possible de [Qu'est-ce qu'une erreur de symbole externe non résolue/non résolue et comment la réparer?] (Http://stackoverflow.com/questions/12573816/what-is-an-defined-reference-unresolved-external- error-symbol-and-how-do-i-fix) –

+0

Vous êtes sûr d'avoir fourni la définition de la fonction 'BOOL CALLBACK EnumDevicesCallback (const DIDEVICEINSTANCE * DeviceInfo, VOID * Context);' dans votre programme? –

Répondre

2

Ce n'est pas ainsi que fonctionnent les rappels.

EnumDevicsCallback n'est pas une fonction qui existe. Vous êtes censé écrire votre propre fonction que EnumDevices appellera pour chaque périphérique. Votre fonction ne doit pas être appelée EnumDevicesCallback - c'est un exemple.

Par exemple, si vous voulez juste imprimer le nom de chaque appareil, vous pouvez écrire

BOOL CALLBACK PrintDevicesCallback(const DIDEVICEINSTANCE* DeviceInfo, VOID* Context) 
{ 
    _tprintf("%s %s\n", DeviceInfo->tszProductName, DeviceInfo->tszProductName); 
    return DIENUM_CONTINUE; 
} 

puis passer à PrintDevicesCallbackEnumDevices.

0

J'ose dire, le coupable est BOOL CALLBACK EnumDevicesCallback(const DIDEVICEINSTANCE* DeviceInfo, VOID* Context); - la fonction est probablement une fonction C, mais vous le déclarez dans votre fichier. Cpp comme fonction C++. Au lieu de cela, incluez un fichier .h approprié avec la déclaration, qui est susceptible d'avoir la valeur extern correcte spécifiée.

+0

:: slaps front :: Doh! J'ai seulement vu la fonction de rappel dans l'exemple précédent. Il ne m'était pas venu à l'esprit que j'avais besoin d'écrire le mien. Merci à tous ceux qui ont souligné cela, il a résolu le problème de compilation. – deSTRUCTor