Каков эквивалентный код C # для этого фрагмента кода Canon SDK C ++? - PullRequest
0 голосов
/ 23 сентября 2010

Что такое эквивалент C # этого кода C ++?

private:
    static EdsError EDSCALLBACK ProgressFunc (
                        EdsUInt32   inPercent,
                        EdsVoid *   inContext,
                        EdsBool *   outCancel
                        )
    {
        Command *command = (Command *)inContext;
        CameraEvent e("ProgressReport", &inPercent);
        command->getCameraModel()->notifyObservers(&e);
        return EDS_ERR_OK;
    }

Ответы [ 2 ]

4 голосов
/ 23 сентября 2010

Чтение между строк - есть оболочка .Net 2.0 (включая исходный код) для Canon SDK здесь и еще один здесь

2 голосов
/ 23 сентября 2010

Это перевод грубый для иллюстрации:

private static void ProgressFunc(uint percent, object context, out bool cancel)
{
    Command command = (Command)context;
    CameraEvent e = new CameraEvent("ProgressReport", percent);
    command.GetCameraModel().NotifyObservers(e);
    cancel = false;
}

(EdsError был изменен на void, потому что мы используем исключения в C # вместо кодов ошибок;EDSCALLBACK определяется как __stdcall, что здесь не имеет значения; код работает только при наличии всех подразумеваемых классов и методов; идиоматический C # будет использовать event / EventHandler / EventArgs вместо метода "NotifyObservers"; Я предполагаю, что вы не хотите взаимодействовать с C ++).

...