繁体   English   中英

我可以使用C#预处理器跳过Kinect v2.0代码吗?

[英]Can I use the C# preprocessor to skip Kinect v2.0 code?

快速问题,我正在开发一个小程序,希望与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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM