Zoom Meeting SDK предоставляет разработчикам мощные инструменты для интеграции видеоконференций в их собственные приложения. Однако при работе с SDK нередко возникают технические трудности, особенно на платформе Windows. Одна из самых распространённых проблем — сборка проекта не проходит из-за ошибок, связанных с абстрактными классами и несовпадением интерфейсов. В обсуждениях на Zoom Developer Forum многие пользователи сообщают о схожих ошибках, которые блокируют процесс разработки и внедрения функционала. Разберём основные причины и пути решения проблемы сборки Meeting SDK на Windows на примере наиболее частых сообщений об ошибках, встречающихся у разработчиков.
Ключевая ошибка, мешающая успешной компиляции — «cannot instantiate abstract class» с указанием конкретного интерфейса ZoomSDKAudioRawDataDelegate. Это происходит из-за того, что класс-наследник, описанный в исходном коде, не реализует полностью все чисто виртуальные функции базового абстрактного класса IZoomSDKAudioRawDataDelegate. В частности, функция onShareAudioRawDataReceived остаётся невыполненной, что не позволяет компилятору создать экземпляр данного класса. Важным аспектом является то, что Zoom SDK со временем обновляется, и интерфейсы могут дополняться новыми методами, которые обязательно требуется реализовать в пользовательских классах. Если код проекта взят из старого примера, он не будет соответствовать текущей спецификации SDK, и компиляция завершится с ошибками.
Чтобы устранить эту ошибку, необходимо внимательно проверить определение класса ZoomSDKAudioRawDataDelegate и убедиться, что в нем реализована функция onShareAudioRawDataReceived с соответствующей сигнатурой, как указано в последней версии SDK. Кроме того, стоит перепроверить правильность подключения заголовочных файлов и библиотек, чтобы не возникало конфликтов между версиями. На форуме Zoom активно делились рабочими фрагментами кода, которые помогали исправить данный баг. Обычно это заключается в добавлении реализации недостающего метода, даже если в нем пока будет пустое тело функции. Это важно для соблюдения требований компилятора.
Помимо ошибки с абстрактным классом, пользователи часто сталкиваются с рядом предупреждений от компилятора, связанных с использованием стандартных контейнеров STL и умных указателей в библиотеках третьих сторон, например, yaml-cpp. В частности, предупреждения типа C4251 о необходимости DLL-интерфейса связаны с экспортом классов, содержащих сложные структуры данных. Эти предупреждения не блокируют сборку, но рекомендуется их учитывать для стабильности и правильной работы приложения в будущем. Для их устранения можно использовать специальные директивы компилятора или скорректировать настройки экспортируемых символов. Нередко проблема кроется в несовместимости версии Visual Studio или выбранной конфигурации сборки.
В обсуждении с пользователями Zoom советуют использовать последние версии Microsoft Visual Studio (например, 2022), а также тщательно переключаться на конфигурацию Release с архитектурой x64, которая поддерживается SDK с официального релиза Zoom. При настройке проекта важно проверить не только параметры платформы, но и соответствие настроек компоновщика и директорий с библиотеками SDK. В некоторых случаях помогает очистка кэша, пересборка решения и удаление временных файлов. Дополнительный совет — использовать предоставленные Zoom официальные демо-примеры из репозитория, которые исправлены и актуальны. На форуме Zoom специалисты рекомендуют взять за основу последнюю версию demo_sdk_v2 и постепенно внести свои изменения, чтобы минимизировать ошибки компиляции.
Весь процесс настройки и устранения ошибок требует внимательного изучения документации по SDK, а также рекомендаций из Developer Forum. Там Zoom специалисты нередко публикуют советы и исправленные примеры кода, которыми можно смело пользоваться. В частности, в одном из постов moderator под ником chunsiong.zoom предложил альтернативный рабочий пример, исправляющий ошибку с ZoomSDKAudioRawDataDelegate. Следуя этому примеру, многие разработчики смогли успешно собрать проект и запустить работу SDK в своих приложениях.