2012-03-11 30 views
1

我有一个VS2010项目,它是一个从特定的蓝牙设备获取数据的Windows应用程序。我想要做的就是改变我的采集线程,发送使用OSC获取的数据。如何在Windows/C++中简单发送OSC数据包?

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

我切换到尝试使用OSCPACK库,我无法使用该版本中包含的批处理文件进行编译。我最终能够让我的VS2010项目识别库,但我现在得到的是链接器错误(LNK2019和LNK2001)。相关目录在项目属性的“其他包含目录”中列出。我知道这应该是一件容易解决的事情,但经过一天的沮丧之后,我的智慧已经结束了。我习惯于在osx中​​使用xcode,因此很难在VS2010中完成任何事情。我是否需要向链接器提供其他说明?

任何人都可以提出一个简单的,预建的OSC库与Windows/VS兼容或如何我可以解决我的问题与未解决的外部?

回答

2

OSC是一个非常简单的协议,特别是如果您只需发送传出OSC消息而不关心接收(并解析)传入的OSC消息。你可以做的一件事是读取spec并查看一些examples并编写你自己的函数,以规定的格式将OSC数据添加到字节缓冲区中。这只是几个小时的工作。那么这只是通过UDP套接字发送该char缓冲区的问题,这也很简单。根据您的需要,尝试与第三方OSC库集成可能更容易(我同意这可能令人沮丧,尤其是在Windows下)。

另一种可能性是使用OSCPACK,而不是单独构建它,然后链接到生成的DLL/LIB文件,只需将必要的OSCPACK .c文件直接复制到您自己的项目的源代码树中并将它们编译为您的可执行文件与编译自己的代码的方式相同。这样可以避免任何令人讨厌的构建/链接问题,这些问题可能会伴随着试图让两个不同的构建系统一起工作,并且它还使您能够完全控制OSC代码的副本(例如:副本)。如果你希望OSCPACK中的特定功能工作不同,你可以简单地修改你的功能副本。 (如果你这样做,一定要明确表示代码不再是“库存”,以避免混淆......当然,尽量不要修改它,以便破坏与其他OSC的协议兼容性 - 使用软件)

+0

顺便说一句,如果你真的写自己的OSC消息生成器例程,唯一不太明显的事情要注意的是字符串填充规则:每个OSC字符串*必须*有1和4之间NUL/0字节,以便下一个字段将以字对齐的偏移量开始。这,并确保所有的整数和浮点值是大端。 – 2012-03-11 19:41:59

+0

感谢您的帮助!我最终设法编译了oscpack,尽管我似乎在开始写入数据包和实际发送数据包之间发生了异常。但已取得进展! – cdnza 2012-03-11 22:25:06