最近由于需求,买了一个Xtion Live Pro,因此必须使用OpenNI进行体感开发了。很久没关注了,现在才发现OpenNI已经更新到了2.1beta,接口有非常大的调整,因此过去的很多C#Wrapper都不能用了,而且目前网上还没有针对新版本的Wrapper。用C++开发虽然灵活强大,但还是希望借助WPF或WinForm的优势进行软件开发,因此打算自己实现一个Wrapper,同时希望这个Wrapper的接口和Kinect SDK的接口尽可能相似,能用于任何.Net项目。
这里记录一下实现过程中学到的和需要注意的东西。
一、P/Invoke:
在C#与C/C++编写的Dll进行互操作时,Pinvoke是避免不了的。在调用C/C++函数时,一些参数是指针,在C#当中可以使用以下一些方法:
1、使用ref关键字:
[DllImport("OpenNI2.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern OniStatus oniDeviceGetInfo(IntPtr device, ref OniDeviceInfo pInfo);
如上面的pInfo参数,需要一个指向OniDeviceInfo结构的指针,ref关键字的作用是传递引用,本质上就是指针。
使用时,在传递的参数前加上ref即可,如下: