AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.08.2008, 18:28   #1  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Цитата:
Сообщение от RumataEstor Посмотреть сообщение
А что должно измениться? always же тоже нигде не объявлен.]
Я и имею в виду, что never - это не магическое слово какое-то, а просто удобное в данном случае, чтобы по названию смысл был понятен.
Старый 20.08.2008, 18:40   #2  
RumataEstor is offline
RumataEstor
очами вижу
 
84 / 19 (1) ++
Регистрация: 29.04.2008
Адрес: Москва
Цитата:
Сообщение от oip Посмотреть сообщение
Я и имею в виду, что never - это не магическое слово какое-то, а просто удобное в данном случае, чтобы по названию смысл был понятен.
Ясно.
А вот мне интересно, можно ли объявить макрос так, чтобы он сразу стал доступен во всех модулях?
Старый 21.08.2008, 12:32   #3  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5803 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от RumataEstor Посмотреть сообщение
можно ли объявить макрос так, чтобы он сразу стал доступен во всех модулях?
Можно - для этого в макросе надо вместо define'ов сразу писать текст (кусок кода, например), который вы хотите подставлять в местах использования макроса. В этих местах вам надо будет указать само название макроса с '#', см., например, макрос FilePathDelimiter. А, скажем, в макросе InventDimJoin можно посмотреть, как использовать переданные макросу параметры. Главное тут - не увлекаться, чтобы не ухудшать читаемость кода (см. A rant against flow control macros).
За это сообщение автора поблагодарили: aidsua (1).
Старый 21.08.2008, 14:31   #4  
RumataEstor is offline
RumataEstor
очами вижу
 
84 / 19 (1) ++
Регистрация: 29.04.2008
Адрес: Москва
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Можно - для этого в макросе надо вместо define'ов сразу писать текст (кусок кода, например), который вы хотите подставлять в местах использования макроса. В этих местах вам надо будет указать само название макроса с '#', см., например, макрос FilePathDelimiter. А, скажем, в макросе InventDimJoin можно посмотреть, как использовать переданные макросу параметры. Главное тут - не увлекаться, чтобы не ухудшать читаемость кода (см. A rant against flow control macros).
Наверное, я в третий раз плохо описываю свое желание.
Мы видим, что в некоторых модулях проверяется наличие макроса never (для чего это сделано в данном случае неважно), но так как он не определен, код внутри этих команд препроцессора не компилируется.
Желание таково: заставить компилироваться код внутри этих #if-ов.

В C++ достаточно добавить такой дефайн в параметры компилятора, чтобы он был определен во всех модулях. Можно ли в аксапте сделать так же?
Старый 21.08.2008, 14:38   #5  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5803 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от RumataEstor Посмотреть сообщение
Наверное, я в третий раз плохо описываю свое желание. Мы видим, что в некоторых модулях проверяется наличие макроса never (для чего это сделано в данном случае неважно), но так как он не определен, код внутри этих команд препроцессора не компилируется. Желание таково: заставить компилироваться код внутри этих #if-ов.
Ну дык ить... я же написал: достаточно создать в узле AOT\Macros макрос с названием never и в этом макросе написать что-нить, например, просто "1" (без кавычек), после чего запустить глобальную компилляцию. Только это все теория - ни в коем случае не создавайте на самом деле такой макрос, а то поломаете приложение в куче мест!
Старый 21.08.2008, 15:38   #6  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Ну дык ить... я же написал: достаточно создать в узле AOT\Macros макрос с названием never и в этом макросе написать что-нить, например, просто "1" (без кавычек), после чего запустить глобальную компилляцию. Только это все теория - ни в коем случае не создавайте на самом деле такой макрос, а то поломаете приложение в куче мест!
Не, такое не будет работать.
Это должен быть именно #define.Something

Макросы в АОТ не покатят.

В ответ на вопрос RumataEstor: опять же, нет, думаю такого места нет
За это сообщение автора поблагодарили: gl00mie (5).
Старый 21.08.2008, 16:35   #7  
RumataEstor is offline
RumataEstor
очами вижу
 
84 / 19 (1) ++
Регистрация: 29.04.2008
Адрес: Москва
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Ну дык ить... я же написал: достаточно создать в узле AOT\Macros макрос с названием never и в этом макросе написать что-нить, например, просто "1" (без кавычек), после чего запустить глобальную компилляцию. Только это все теория - ни в коем случае не создавайте на самом деле такой макрос, а то поломаете приложение в куче мест!
Проверил. Не работает.

Цитата:
Сообщение от kashperuk Посмотреть сообщение
Не, такое не будет работать.
Это должен быть именно #define.Something

Макросы в АОТ не покатят.

В ответ на вопрос RumataEstor: опять же, нет, думаю такого места нет
Жаль
Миниатюры
Нажмите на изображение для увеличения
Название: macrotest.PNG
Просмотров: 400
Размер:	35.1 Кб
ID:	3640  
Старый 21.08.2008, 16:43   #8  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5803 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Не, такое не будет работать. Это должен быть именно #define.Something Макросы в АОТ не покатят.
Мда, действительно. Опять тут возникает некоторая путаница из-за "упрощенного" синтаксиса В общем, когда создается подузел в AOT\Macros, то включить текст этого узла в код можно с помощью директивы #macrolib.имя_макроса_в_AOT, хотя допускается "сокращенный" вариант - просто #имя_макроса_в_AOT. В то же время, для препроцессора (как выясняется ) макрос как тот или иной узел в AOT\Macros и макрос, определенный с помощью директив #define/#globaldefine, суть вещи разные. По крайней мере, в Ms Dynamics SDK в разделе «How to: Use the #macrolib Directive for AOT Macro Libraries» пишут
Цитата:
The #if and #undef directives do not apply to #macrolib names. However, they do apply to #define directives that are the contents of a #macrolib macro.
И еще там же есть раздел «Range of Macro Referencing», где подробно объясняется, как препроцессор определяет область видимости макроса (опять же, с точки зрения директивы #if макросом является то, что объявлено с помощью директив #define/#globaldefine) - никаких "единых для всего приложения" мест там не упоминается...

PS. Отсюда - мораль: надо чаще читать документацию
Теги
ax2009, ax4.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
if (record) vs if (record.RecId) kashperuk DAX: Программирование 18 27.11.2008 18:53
if (record) в случае join с использованием group by kashperuk DAX: Программирование 9 07.12.2007 15:11
If iexplore.exe suxx... EVGL DAX: База знаний и проекты 16 29.06.2007 11:51
InventJournalTrans DreamCreator DAX: Программирование 7 14.12.2004 14:48
Говорят вышел SP2 для Axapta 3. Кто нибуть что знает на эту тему? soin DAX: Прочие вопросы 10 13.10.2003 10:43

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 12:09.