Linux Socket 传输 Leap Motion 数据示例

这是一个简单的在 Linux 环境下使用 TCP/IP 传输数据的小例子,分为 Server 端和 Client 端,Server 端将 Leap Motion 处理后的数据传送给 Client 端。
Linux Socket 部分参考自 红薯 分享在开源中国的例子:Linux Socket 编程实例(一个Hello World程序)
Leap Motion 部分使用的是官方提供的 Sample 程序。

思路

1.TCP/IP 需要先初始化,使用代码进行端口绑定和监听。这部分代码可添加到 Leap Motion 监听类的初始化函数onInit()中。
2.TCP/IP 中循环接收数据的部分可添加到 Leap Motion 的onFrame()中。
3.在 Leap Motion 监听类退出时onExit(),因同时关闭 Socket 的监听进程。
4.将 Leap Motion 处理后的整型数据通过stringstream作为中转,最后转换为char *型,送入缓冲区,发送。
5.Client 端接收到的为char *型,可通过字符串截取的方式取出数据并转换为整型。(该部分代码并未给出。)
Continue Reading…

理解并使用 Windows 函数

我们在Windows上进行一些开发的时候,能善于利用Windows开放出来的应用程序编程接口(Windows API)往往能使我们事半功倍。而且往往有些操作不可避免的需要使用Windows的内部函数。
Microsoft在MSDN上将每个Windows函数的原型和使用方法(基于C++)都公布出来了。

(小技巧:在已知函数名的情况下可以百度或Google“函数名 function (Windows)”获得其在MSDN中的页面。)

怎样阅读并使用Windows API?

以ShellExecute函数为例:

http://msdn.microsoft.com/en-us/library/windows/desktop/bb762153%28v=vs.85%29.aspx

函数原型句法(Syntax):

Continue Reading…

Windows via C/C++ Chapter 1 : Windows 错误处理

基础知识:

1.调用Windows函数时,它会验证我们传递给它的参数,然后才开始执行。
2.如果函数执行出错,通过判断函数的返回值可以获取错误的原因。返回错误代码有助于我们理解函数为何会失败。
3.常见返回值的数据类型:
VOID:不可能失败,极少数Windows函数返回值为该类型;
BOOL:失败返回0;否则返回非0;检验时检验是否不为FALSE;
HANDLE:失败返回NULL,否则将标识一个可操纵对象;
PVOID:失败返回NULL,否则将标识一个数据块内存地址;
LONG/DWORD:返回计数的函数通常会返回一个LONG/DWORD;如果处于某个原因无法计数,通常会返回0或-1;
4.函数检测到错误,会用“线程本地存储区”(thread-local-storage)将错误代码和“主调线程”关联,是不同线程独立运行且不会出现干扰对方错误代码。
5.WinError.h头文件包含了Microsoft定义的错误代码列表。每个错误有三种表示:消息ID(用于和GetLastError返回值做比较)、消息文本(描述错误)、编号(避免使用)。
6.MS Visual Studio,可在MS调试器中配置Watch窗口,选择一行并输入$err,hr显示线程上一个错误代码和错误的文本描述。
7.我们可以通过SetLastError函数自己定义错误代码,传递我们认为合适的任何32位值。
8.错误代码是一个32位数,不同字段代表不同含义。
31-30:0=成功,1=提示,2=警告,3=错误
29: 0=MS定义,1=客户定义
28: 必须为0
27-16:前256个值MS保留,共容纳4096个值
15-0: 异常代码,MS/客户定义
Continue Reading…