如何在windows/C++中简单地发送OSC数据包

How can I send OSC packets simply in windows/C++?

本文关键字:OSC 数据包 简单 windows C++      更新时间:2023-10-16

我有一个VS2010项目,它是一个从特定蓝牙设备获取数据的windows应用程序。我所想做的就是更改我的采集线程,以发送它使用OSC采集的数据。

我花了很长时间尝试使用一个名为LIBLO的库,但它似乎使用了POSIX风格的异步性。我花了更多的时间试图让pthreads-win32为我工作,这样我仍然可以使用这个库,但仍然没有运气。

我转而尝试使用OSCPACK库,但无法使用该版本中包含的批处理文件进行编译。我最终能够让我的VS2010项目识别库,但我现在得到的只是链接器错误(LNK2019和LNK2001)。相关目录列在项目属性的"附加包含目录"中。我知道这应该很容易解决,但在经历了一天的挫折之后,我已经无计可施了。我习惯于在osx中使用xcode,所以发现在VS2010中很难完成任何事情。我是否需要向链接器提供其他说明?

有人能建议一个简单的、预先构建的、与windows/VS兼容的OSC库吗?或者我如何解决未解决的外部问题?

OSC是一个非常简单的协议,尤其是当您只需要发送传出OSC消息而不关心接收(和解析)传入OSC消息时。您可以做的一件事就是简单地阅读规范并查看一些示例,然后编写自己的函数,将OSC数据以规定的格式添加到字节缓冲区中。这只需要几个小时的工作。然后,只需要通过UDP套接字发送字符缓冲区,这也很简单。根据您的需要,尝试与第三方OSC库集成可能会更容易(我同意这可能会令人沮丧,尤其是在Windows下)。

另一种可能性是使用OSCPACK,但与其尝试单独构建它,然后链接到生成的DLL/LIB文件,只需将必要的OSCPACK.c文件直接复制到您自己项目的源树中,并以编译自己代码的方式将它们编译到可执行文件中。这将避免试图让两个不同的构建系统协同工作时可能出现的任何恼人的构建/链接问题,而且它还可以让您完全控制OSC代码的(混蛋)副本。。。例如,如果您希望OSCPACK中的某个特定函数以不同的方式工作,您可以简单地修改该函数的副本。(如果你这样做,一定要确保代码不再是"库存",以避免混淆…当然,尽量不要以破坏与其他使用软件的OSC的协议兼容性的方式修改它)