Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Алексей (IdeaSoft) от 11-01-2017, 18:19:05

Название: Условная компиляция
Отправлено: Алексей (IdeaSoft) от 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.  
Название: Re: Условная компиляция
Отправлено: Александр Ривилис от 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)
Название: Re: Условная компиляция
Отправлено: Алексей (IdeaSoft) от 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
Название: Re: Условная компиляция
Отправлено: Алексей (IdeaSoft) от 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.         }