Как я могу отправлять пакеты OSC просто в Windows / C ++? - PullRequest
1 голос
/ 11 марта 2012

У меня есть проект VS2010, который представляет собой приложение для Windows, которое получает данные с определенного устройства Bluetooth. Все, что я хочу сделать, - это изменить поток сбора данных, чтобы отправлять полученные данные с помощью OSC.

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

Я переключился на попытку использовать библиотеку OSCPACK, которую не смог скомпилировать, используя пакетный файл, включенный в выпуск. В конце концов мне удалось заставить мой проект VS2010 распознавать библиотеку, но теперь я получаю только ошибки компоновщика (LNK2019 и LNK2001). Соответствующие каталоги перечислены в разделе «Дополнительные каталоги включения» в свойствах проекта. Я знаю, что это должно быть что-то легко исправить, но после дня разочарования я нахожусь в конце своего ума. Я привык работать с xcode в osx, поэтому мне сложно что-либо сделать в VS2010. Нужно ли давать дополнительные инструкции компоновщику?

Кто-нибудь может предложить простую, предварительно собранную библиотеку OSC, совместимую с windows / VS, или как я могу решить мою проблему с нерешенными внешними объектами?

1 Ответ

2 голосов
/ 11 марта 2012

OSC - это очень простой протокол, особенно если вам нужно только отправлять исходящие сообщения OSC и не заботиться о получении (и разборе) входящих сообщений OSC. Одна вещь, которую вы можете сделать, это просто прочитать spec и посмотреть на examples и написать свою собственную функцию, которая добавляет данные OSC в байтовый буфер в заданном формате. Это всего лишь несколько часов работы. Тогда это просто вопрос отправки этого буфера символов через UDP-сокет, что также довольно просто сделать. В зависимости от ваших потребностей, это может быть проще, чем попытка интеграции со сторонней библиотекой OSC (что, я согласен, может разочаровать, особенно под Windows).

Другая возможность - использовать OSCPACK, но вместо того, чтобы пытаться создать его отдельно, а затем связать его с полученным файлом DLL / LIB, просто скопируйте необходимые файлы OSCPACK .c непосредственно в дерево исходных текстов вашего собственного проекта и скомпилируйте их в свой файл. исполняется так же, как вы компилируете свой собственный код. Это позволит избежать любых назойливых проблем сборки / связывания, которые могут возникнуть при попытке заставить две разные системы сборки работать вместе, а также даст вам полный контроль над вашей (ублюдочной) копией кода OSC ... например, если вы хотите, чтобы определенная функция в OSCPACK работала по-другому, вы можете просто изменить свою копию этой функции. (Если вы сделаете это, убедитесь, что код больше не является «запасным», чтобы избежать путаницы ... и, конечно, постарайтесь не изменять его таким образом, чтобы нарушить совместимость протокола с другими OSC-использующими программное обеспечение)

...