Canon SDK v 2.3(2.4) EdsSetObjectEventHandler()
От: Аноним  
Дата: 22.09.08 09:00
Оценка:
Добрый день! Пишу программу для фотоаппарата Canon EOS 450D, MS VS 2005 C#.
Сделал инициализацию сдк, подключение к камере, делаю снимок, а загрузить его пока не получается...
Возникла проблема с коллбэк функцией ObjectEventCallBack, а именно: она никогда не вызывается у меня
Хотя другие ObjectEventHandler, PropertyEventHandler итд срабатывают нормально.

//объявляем делегат
EDSDK.EdsObjectEventHandler ObjectEventHandle;
//создаём
ObjectEventHandle = new EDSDK.EdsObjectEventHandler(ObjectEventCallBack);
//регистрируем
err = EDSDK.EdsSetObjectEventHandler(camera, EDSDK.ObjectEvent_All, ObjectEventHandle, IntPtr.Zero);
//регистрация успешно... err = 0;
//CALLBACK FUNCTION ... FUCK... NEVER CALLED!!!
public uint ObjectEventCallBack(uint inEvent, IntPtr obj, IntPtr inContext)
{
switch (inEvent)
{
case EDSDK.ObjectEvent_DirItemRequestTransfer:
//Загрузить изображение!
DownloadImage(obj);
break;

default:
//Object without the necessity is released
if (obj != IntPtr.Zero)
{
EDSDK.EdsRelease(obj);
}
break;
}

return EDSDK.EDS_ERR_OK;
}

Может кто уже сталкивался с подобной проблемой
Re: Canon SDK v 2.3(2.4) EdsSetObjectEventHandler()
От: Duha  
Дата: 01.10.08 06:19
Оценка:
Боролся с этой проблемой на С++. Посмотрел иностранные поисковики. Есть народ который мучается именно с этой проблемой. Все работает, кроме callback'а. Кто-то советовал проверить чтобы запись шла на комп а не на флэшку, проверил, все нормально ...
EdsUInt32 saveTo = kEdsSaveTo_Host;
err = EdsSetPropertyData(m_camera, kEdsPropID_SaveTo, 0, sizeof(saveTo) , &saveTo);

Но ! Мой код был в Console проекте (под Win32), работающее приложение из SDK под MFC. После того как я перенес мой-же код в MFC проект, все заработало ... видимо этот callback каким-то образом использует или очередь сообщений Win32 или еще что-то чего нет в консольном приложении.
Также радует комментарий в примере к SDK:
#ifdef __MACOS__
/*
* Caution!
* About a console application, you need calling Carbon API "RunCurrentEventRoop()"
* after calling "EdsInitializeSDK()".
* If you do not call this API, the program might stop when it execute OpenSession(), but
* we do not understand why it stops.
*/
RunCurrentEventLoop(10 * kEventDurationMillisecond) ;
#endif

Так что, как говорится, заработало и хорошо ... не трогай!
разработка 3d сканеров www.volumetechnologies.ru
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.