C# Canon SDK: нет обратного вызова после CameraCommand_TakePictureC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 C# Canon SDK: нет обратного вызова после CameraCommand_TakePicture

Сообщение Anonymous »


Я уже некоторое время пытаюсь заставить это работать... прочитал много сообщений, но ни одно из них не смогло решить эту проблему.

Я подключаюсь к EOS 550D с помощью Canon SDK. Я использую 64-битную версию Win7 и Visual Studio C# 2010.

Что я делаю шаг за шагом:

--> 0 Инициализировать SDK

err = EDSDK.EdsInitializeSDK(); --> 1 Получение списка камер

err = EDSDK.EdsGetCameraList(out cameraList); --> 2 Получение количества детей

err = EDSDK.EdsGetChildCount(cameraList, out cameraCount); --> 3 Если есть ребенок, получить первого ребенка

err = EDSDK.EdsGetChildAtIndex(cameraList, 0, out cameraDev); --> 4 Открытие сеанса

err = EDSDK.EdsOpenSession(cameraDev); --> 5 Указание SDK сохранять изображения локально

IntPtr saveTo = (IntPtr)EDSDK.EdsSaveTo.Host; ошибка = EDSDK.EdsSetPropertyData(cameraDev, EDSDK.PropID_SaveTo, 0, 4, saveTo); --> 6 Настройка доступной емкости на хост-компьютере

Емкость EDSDK.EdsCapacity = новый EDSDK.EdsCapacity(); если (ошибка == EDSDK.EDS_ERR_OK) { емкость.NumberOfFreeClusters = 0x7FFFFFF; емкость.BytesPerSector = 0x1000; емкость.Сброс = 1; ошибка = EDSDK.EdsSetCapacity(cameraDev, емкость); } --> 7 Регистрация обработчика событий состояния

err = EDSDK.EdsSetCameraStateEventHandler(cameraDev, EDSDK.StateEvent_All, stateEventHandler, new IntPtr(0)); --> 8 Регистрация обработчика событий объекта

EDSDK.EdsObjectEventHandler edsObjectEventHandler = новый EDSDK.EdsObjectEventHandler(objectEventHandler); err = EDSDK.EdsSetObjectEventHandler(cameraDev, EDSDK.ObjectEvent_All, edsObjectEventHandler, IntPtr.Zero); ....

При этом я не получаю никаких ошибок, кажется, все в порядке.

Вот мой обработчик

частный uint objectEventHandler(uint inEvent, IntPtr inRef, IntPtr inContext) { Console.WriteLine("ХАЛЛЛОООООООО"); переключатель (inEvent) { случай EDSDK.ObjectEvent_DirItemCreated: //this.invokeNewItemCreatedEvent(новый NewItemCreatedEventArgs(getCapturedItem(inRef))); Console.WriteLine("Элемент каталога создан"); перерыв; случай EDSDK.ObjectEvent_DirItemRequestTransfer: Console.WriteLine("Запрошена передача элемента каталога"); перерыв; по умолчанию: Console.WriteLine(String.Format("ObjectEventHandler: событие {0}, ссылка {1}", inEvent.ToString("X"), inRef.ToString())); перерыв; } вернуть 0x0; } public uint stateEventHandler (uint inEvent, uint inParameter, IntPtr inContext) { Console.WriteLine("stateEventHandler " + inEvent); переключатель (inEvent) { случай EDSDK.StateEvent_JobStatusChanged: Console.WriteLine(String.Format("Есть объекты, ожидающие передачи. Статус задания {0}", inParameter)); перерыв; случай EDSDK.StateEvent_ShutDownTimerUpdate: если (инПараметр!= 0) Console.WriteLine(String.Format("обновление таймера выключения: {0}", inParameter)); перерыв; случай EDSDK.ObjectEvent_DirItemRequestTransfer: //ЧТО МНЕ НУЖНО!!! Console.WriteLine("Привет, DirItemRequestTransfer"); //Загрузить изображение(объект); перерыв; по умолчанию: Console.WriteLine(String.Format("StateEventHandler: событие {0}, параметр {1}", inEvent, inParameter)); перерыв; } вернуть 0; } ...

Итак, теперь моя проблема в том, что ни один обработчик никогда не вызывается. Не знаю почему, я довольно долго искал в сети, пробовал разные подходы, но обратного вызова не получил...

Вот мой метод, вызывающий команду сделать снимок:

public void takePic() { если (камера открыта) { Console.WriteLine("делаю снимок"); ошибка = EDSDK.EdsSendCommand(cameraDev, EDSDK.CameraCommand_TakePicture, 0); если (ошибка != EDSDK.EDS_ERR_OK) Console.WriteLine("Ошибка TakeCommand: " + err.ToString()); Console.WriteLine("Съемка завершена"); } } Может быть, у кого-то есть идеи, как я мог бы попытаться заставить это работать?

Заранее спасибо!

С уважением, Тобиас
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»