EDSDK Обработчик для съемки - PullRequest
0 голосов
/ 25 марта 2020

Я пытаюсь создать Программу для моего Canon EOS Rebel T7, но когда я пытаюсь отправить команду EDSDK.EdsSendCommand (CamConn, EDSDK.CameraCommand_TakePicture, 0), программа возвращает ошибку EDS_ERR_INVALID_HANDLE, как я могу добавить правильное Ручка для взятия кирки? Спасибо! Печать кода здесь

1 Ответ

0 голосов
/ 25 марта 2020

Во-первых, добро пожаловать в StackOverflow.

Совет на будущее: скопируйте / вставьте код в свой вопрос, а не ссылку на изображение. Всем легче читать и, возможно, копировать их, чтобы самим попробовать.


Теперь к вашему вопросу:

Откуда берется ручка CamConn? Весьма вероятно, что вызов OpenConnection уже возвращает неверную ошибку дескриптора.

Чтобы получить действительный дескриптор камеры, вам необходимо сделать следующее:

public IntPtr[] GetConnectedCameraPointers()
{
    // get a list of connected cameras
    EDSDK.EdsGetCameraList(out IntPtr cameraList);
    // get the number of entries in that list
    EDSDK.EdsGetChildCount(cameraList, out int cameraCount);

    // create an array for the camera pointers and iterate through the list
    var cameras = new IntPtr[cameraCount];
    for (int i = 0; i < cameraCount; i++)
    {
        // gets an item of the list at the specified index
        EDSDK.EdsGetChildAtIndex(cameraList, i, out IntPtr cameraPtr);
        // get a device info for that camera, this is optional but may interesting to have
        EDSDK.EdsGetDeviceInfo(cameraPtr, out EdsDeviceInfo cameraInfo);
        // store the camera pointer in our array
        cameras[i] = cameraPtr;
    }

    // release the camera list
    EDSDK.EdsRelease(cameraList);

    return cameras;
}

Обратите внимание, что я не проверял вернули коды ошибок для простоты, но вы обязательно должны их проверить.

...