Условная компиляция

Автор Тема: Условная компиляция  (Прочитано 479 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 574
  • Карма: 3
    • idea-soft.ru
  • Skype: makar_govorun
Условная компиляция
« : 11-01-2017, 18:19:05 »
Помогите с дерективой препроцессора
в VB делаю так. Все хорошо.
Код - vb.net [Выбрать]
  1. #Const ACAD_VER = 2013
  2.  
  3.     Public Shared Function acadnet_Document_Add(acadVer As Integer)
  4.         Dim NameTemplate_OUT As String = "c:\template.dwg"
  5.         Dim acDocMgr As CAD_APS.DocumentCollection = CAD_APS.Application.DocumentManager
  6. #If (ACAD_VER >= 2013) Then
  7.         Return DocumentCollectionExtension.Add(acDocMgr, NameTemplate_OUT)
  8. #Else
  9.         Return acDocMgr.Add(NameTemplate_OUT)
  10. #End If
  11.     End Function
Хочу перевести на C#
Что не так делаю?

Код - C# [Выбрать]
  1. #Const ACAD_VER = 2013 // Тут ругается ???
  2.  
  3. public static object acadnet_Document_Add(int acadVer)
  4. {
  5.         string NameTemplate_OUT = "c:\\template.dwg";
  6.         DocumentCollection acDocMgr = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager;
  7.         #if (ACAD_VER >= 2013) // Тут ругается ???
  8.         return DocumentCollectionExtension.Add(acDocMgr, NameTemplate_OUT);
  9.         #else
  10.         return acDocMgr.Add(NameTemplate_OUT);
  11.         #endif
  12. }
  13.  

Отмечено как Решение IdeaSoft 11-01-2017, 18:41:32

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 6827
  • Карма: 753
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Условная компиляция
« Ответ #1 : 11-01-2017, 18:33:21 »
В C# препроцессор сильно урезанный. Так что такие фокусы у тебя не получатся.

Код - C# [Выбрать]
  1. #define ACAD2013
  2.  
  3. #if ACAD2013
  4. // здесь код
  5. #endif
  6.  

Такие сравнения недопустимы:

Код - C# [Выбрать]
  1. #if (ACAD_VER < 2013)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 574
  • Карма: 3
    • idea-soft.ru
  • Skype: makar_govorun
Re: Условная компиляция
« Ответ #2 : 11-01-2017, 18:42:21 »
Ага я понял через #else не делается.
т.е. так

Код - C# [Выбрать]
  1. #define ACAD2013
  2. // или
  3. #define ACAD2012
  4.  
  5. Будет выполнятся то что в блоке #if
  6.  
  7. #if (ACAD2012)
  8.        return DocumentCollectionExtension.Add(acDocMgr, NameTemplate_OUT);
  9. #endif
  10.  
  11. #if (ACAD2013)
  12.     return acDocMgr.Add(NameTemplate_OUT);
  13. #endif

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 574
  • Карма: 3
    • idea-soft.ru
  • Skype: makar_govorun
Re: Условная компиляция
« Ответ #3 : 11-01-2017, 18:47:54 »
 А нет вру делается через #else

Код - C# [Выбрать]
  1.         public static Document acadnet_Document_Add(string NameTemplate_OUT )  {
  2.             DocumentCollection acDocMgr = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager;
  3. #if (ACAD2012)
  4.             return DocumentCollectionExtension.Add(acDocMgr, NameTemplate_OUT);
  5. #else
  6.             return acDocMgr.Add(NameTemplate_OUT);
  7. #endif
  8.         }