2015-09-21 4 views
1

Быстрый вопрос, я разрабатываю небольшую программу, с которой я хотел бы работать с версиями 1 и 2 Kinect. Есть ли команда препроцессора, которую я могу использовать, чтобы компилятор C# пропускал мой код Kinect v2.0, Установлен ли Kinect 2.0 sdk? (Например, когда я работаю над Windows 7).Могу ли я использовать препроцессор C# для пропуска кода Kinect v2.0?

ответ

4

В принципе, как это:

#if KINECT1 
    // ... kinect1 specifict code 
#endif 

#if KINECT2 
    // ... kinect2 specific code 
#endif 

Конечно, вы должны определить эти символы manually, нет встроенной возможности в компиляторе или рамки для обнаружения, какая версия доступна, если вообще.

Возможно, вы обнаружили любой установленный Kinect SDK (версия) с помощью MSBuild. Например, найдите определенные разделы реестра, пути на локальных дисках и/или установите переменные среды, а затем установите эти символы из ваших файлов проекта.

Например, включите следующий фрагмент в верхней части вашего файла .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).

UPDATE

@Scott Чемберлен комментарий помог. На самом деле Kinect 1.0 SDK устанавливает переменную окружения KINECTSDK10_DIR, а 2.0 SDK устанавливает переменную envrionment KINECTSDK20_DIR.

Таким образом, вы могли бы сделать что-то вроде этого (this может помочь, а):

<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> 
+0

Как FYI людям, реализующих решение MSBuild: В SDK действительно создает переменные окружения 'KINECTSDK_DIR' (см" Изменения в этом выпуске "[readme] (http://www.microsoft.com/en-us/kinectforwindows/develop/readme.htm)), этот путь похож на' C: \ Program Files \ Microsoft SDK \ Kinect \ v1.0 Beta2', который должен позволить вам разобрать версию. –

+0

О, круто это наборы 'KINECTSDK20_DIR'. Я не могу установить SDK на машине, на которой я был, поэтому я не мог проверить. –

+0

Спасибо, ребята, мне удалось заставить это работать, пару заметок, хотя это НЕ МОЖЕТ работать для меня, если я не добавлю определения группы свойств _below_ всех существующих групп свойств и над первой группой элементов. Я не уверен, может ли это быть из-за того, что стандартный файл csproj очищает существующие константы, когда он определяет DEBUG, TRACE и т. Д. – Wiredchop

 Смежные вопросы

  • Нет связанных вопросов^_^