2016-01-28 2 views
0

Этот человек меня заводит. Я пробовал все, что мог придумать. Вот соответствующие части кода DirectInput.DirectInput Unresolved External Symbol

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

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

Когда я пытаюсь скомпилировать, я получаю ошибку:

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

Как вы можете видеть, внешний символ компилятор не может найти связан с параметром DIDEVICEINSTANCE функции EnumDevicesCallback. Этого не должно быть, потому что я включил dinput.h и связался с dinput8.lib и dxguid.lib. Я даже попытался определить DIDEVICEINSTANCE в своем собственном коде и получил сообщение о том, что оно противоречило предыдущему определению.

Что может означать это сообщение об ошибке?

+1

Вы используете компилятор C или C++? Они не одинаковы. –

+1

Возможная дубликация [Что такое неопределенная ссылка/неразрешенная ошибка внешнего символа и как ее исправить?] (Http://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-external- symbol-error-and-how-do-i-fix) –

+0

Вы уверены, что предоставили определение функции 'BOOL CALLBACK EnumDevicesCallback (const DIDEVICEINSTANCE * DeviceInfo, VOID * Context);' в вашей программе? –

ответ

2

Это не так, как обратные вызовы работают.

EnumDevicsCallback не является функцией, которая существует. Вы должны написать свою собственную функцию, которую вызовет EnumDevices для каждого устройства. Ваша функция не должна называться EnumDevicesCallback - вот пример.

Например, если вы просто хотите распечатать имя каждого устройства, вы можете написать

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

, а затем передать PrintDevicesCallback в EnumDevices.

0

Я осмелюсь сказать, что виновник BOOL CALLBACK EnumDevicesCallback(const DIDEVICEINSTANCE* DeviceInfo, VOID* Context); - функция, скорее всего, является C-функцией, но вы объявляете ее в своем .cpp-файле как функцию C++.

Вместо этого включите соответствующий .h файл с объявлением, которое, вероятно, будет иметь правильный extern.

+0

:: похлопывает лоб :: До! Я только когда-либо видел функцию обратного вызова в форме примера раньше. Мне не пришло в голову, что мне нужно написать свое. Спасибо всем, кто указал на это, он решил проблему компиляции. – deSTRUCTor

Смежные вопросы