簡體   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