快速问题,我正在开发一个小程序,希望与Kinect版本1和2一起使用。是否可以使用预处理程序命令,以便C#编译器在没有的情况下跳过我的Kinect v2.0代码安装Kinect 2.0 SDK?(例如,当我在Windows 7上工作时)。
基本上是这样的:
#if KINECT1
// ... kinect1 specifict code
#endif
#if KINECT2
// ... kinect2 specific code
#endif
当然,您将必须手动定义这些符号,编译器或框架中没有内置功能来检测可用的版本(如果有的话)。
您可能可以使用MSBuild检测任何已安装的Kinect SDK(版本)。例如,查找特定的注册表项,本地驱动器上的路径和/或设置环境变量,然后从项目文件内部设置这些符号。
例如,在.csproj
文件顶部包含以下片段(或将其放入您自己的单独文件中<Import>
)。
<PropertyGroup Condition="Exists('C:\Program Files\...\Whatever\v1.0')">
<DefineConstants>KINECT1;$(DefineConstants)</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="Exists('C:\Program Files\...\Whatever\v2.0')">
<DefineConstants>KINECT2;$(DefineConstants)</DefineConstants>
</PropertyGroup>
(请记住,以上虽然仅是示例,但不知道检测kinect版本是什么“触发”)。
更新
@斯科特·张伯伦的评论有所帮助。实际上,Kinect 1.0 SDK设置了KINECTSDK10_DIR
环境变量,而2.0 SDK设置了KINECTSDK20_DIR
环境变量。
因此,您可以执行以下操作(这也可能会有所帮助):
<PropertyGroup Condition="'$(KINECTSDK10_DIR)' != '' and Exists('$(KINECTSDK10_DIR)')">
<DefineConstants>KINECT1;$(DefineConstants)</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(KINECTSDK20_DIR)' != '' and Exists('$(KINECTSDK20_DIR)')">
<DefineConstants>KINECT2;$(DefineConstants)</DefineConstants>
</PropertyGroup>
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句