Ошибка EDS_ERR_DEVICE_NOT_FOUND при открытии сеанса камеры Canon ( EdsOpenSession(cRef))

Я разрабатываю метро-приложение для Windows 8, которое может управлять камерой Canon. Мое приложение обнаруживает камеру, а также получает информацию об устройстве. Но когда я открываю сеанс камеры «err = EdsOpenSession(cRef)», я получаю сообщение об ошибке «EDS_ERR_DEVICE_NOT_FOUND».

Но я обнаружил камеру, когда вызываю функцию ниже -

private uint GetFirstCamera()
    {
        // Variable initilazions
        IntPtr cameraList;
        uint err;
        int count;

        // Get list of cameras;
        err = EdsGetCameraList(out cameraList);

        if (err != EDS_ERR_OK)
        {
            return err;
        }

        // Get count of cameras in list
        err = EdsGetChildCount(cameraList, out count);

        if (err != EDS_ERR_OK)
        {
            return err;
        }
        if (count == 0)
        {
            return EDS_ERR_DEVICE_NOT_FOUND;
        }

        // Get first camera to public cRef
        err = EdsGetChildAtIndex(cameraList, 0, out cRef);

        if (err != EDS_ERR_OK)
        {
            return err;
        }

        EDSDKLib.EDSDK.EdsDeviceInfo deviceInfo;

        //Canon EOS REBEL T1i

        if (err == EDS_ERR_OK)
        {
            err = EdsGetDeviceInfo(cRef, out deviceInfo);

            if (err == EDS_ERR_OK & (cRef == null) == true)
            {
                err = (uint)EDS_ERR_DEVICE_NOT_FOUND;
            }

        }

        // release camera list
        if (cameraList != null)
        {
            EdsRelease(cameraList);
        }

        // everything went just fine
        return EDS_ERR_OK;
    }

Вот мой полный код инициализации -

public uint Initialize()
    {
        // err init
        uint err;
        // Initilize SDK.
        // SDK initilizion is needed to use EDSDK functions
        err = EdsInitializeSDK();

        // In case of error pass it on...
        if (err != EDS_ERR_OK)
        {
            return err;
        }

        // get first camera connected to computer
        err = GetFirstCamera(); // **MY CAMERA IS DETECTED IN THIS FUNCTION**

        if (err != EDS_ERR_OK)
        {
            return err;
        }

        err = EdsSetObjectEventHandler(cRef, ObjectEvent_All, ObjectEventHandler, IntPtr.Zero);



        // Open session to camera
        // **ERROR HAPPENS HERE .RETURNS  ERROR CODE 128 -  EDS_ERR_DEVICE_NOT_FOUND** 
        err = EdsOpenSession(cRef); 



        if (err != EDS_ERR_OK)
        {
            return err;
        }

        // We don't want to save pictures to the camera so lets set save target to host
        err = EdsSetPropertyData(cRef, PropID_SaveTo, 0, 4, 1);

        return err;
    }

Я попробовал тот же код в приложении WPF, и он работает. Это происходит только в приложениях магазина Windows / приложениях Metro. Моя модель камеры — Canon EOS REBEL T1i. Версия SDK, которую я использую, — 2.11.


person user1926195    schedule 14.06.2013    source источник


Ответы (2)


Приложение Metro не может взаимодействовать с устройством за пределами песочницы. Причина 426, что я не пишу метро приложения.

person joe.feser    schedule 23.10.2014
comment
Вы подтвердили мой ответ, заявив, что он отлично работает в WPF. - person joe.feser; 23.10.2014

Проверьте, строите ли вы «ЛЮБОЙ ЦП». Canon EDSDK работает только для "x86", даже если у вас 64-битная Windows.

Это помогает?

person peter.cyc    schedule 26.06.2013
comment
Нет, я строю только на x86. Я уже встречал эту проблему с любым процессором ранее и перешел на x86. - person user1926195; 03.07.2013