Цикл сообщений EDSDK не работает в Windows 8.1

Я использую Canon EDSDK_64 v2.15. Я могу получать события, отправленные Canon SDK, используя простой цикл сообщений под Windows7. Например, когда я хочу сделать снимок и в ожидании данных изображения, которые я использую:

xCanonError = EdsSendCommand(xCanonEOS, kEdsCameraCommand_TakePicture, 0);

if(xCanonError != EDS_ERR_OK)
{
AddLogText(L"sending command TakePicture - error - "+SmartCanon::GetCanonSDKError(xCanonError));
return false;
}

MSG msg;

while(eState == detector_state_busy)
{
if (::GetMessage(&msg, NULL, NULL, NULL) == -1)
{
AddLogText(L" - capture image - waiting for an image - GetMessage() error - " + std::to_wstring(HRESULT_FROM_WIN32(GetLastError())));
break;
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

Sleep(2);
};

Вот как я регистрирую свой обработчик объекта:

xCanonError = EdsSetObjectEventHandler(xCanonEOS, kEdsObjectEvent_All, CSDKHandleObjectEvent, this);
if (xCanonError != EDS_ERR_OK)
{
AddLogText(L"EdsSetObjectEventHandler() - error - "+GetCanonSDKError(xCanonError));
EdsRelease(xCanonEOS);
xCanonEOS = NULL;
EdsTerminateSDK();
return;
}

куда xCanonEOS является EdsCameraRef; this это указатель на класс, который я использую для выполнения всей работы с моей камерой Canon. А вот моя функция обработчика событий объекта:

    EdsError EDSCALLBACK CSDKHandleObjectEvent(EdsObjectEvent p_sCSDKEvent, EdsBaseRef p_sCSDKObject, EdsVoid* p_pCSDKData)
{
// my class for working with Canon camera
SmartCanon::TDetectorCANON* v_psDetectorCanonEOS = reinterpret_cast<SmartCanon::TDetectorCANON*>(p_pCSDKData);
// a lot of irrelevant code...
v_psDetectorCanonEOS->SetState(detector_state_idle);
return EDS_ERR_OK;
}

Моя проблема в том, что тот же код не работают под Windows 8.1. Программа просто зайти в while цикл и зарегистрированная функция обратного вызова никогда не вызывается.

Я использую VS2013 x64 компилятор. Моя камера Canon EOS 60D. Мое приложение использует библиотеку MFC.

Может кто-то может указать, что я делаю неправильно или предоставить решение, как решить эту проблему?

2

Решение

У меня была та же проблема, и с 32-битной версией была решена функция обратного вызова.

-1

Другие решения