|
|
|
|
#1 |
|
Участник
|
Цитата:
|
|
|
|
| За это сообщение автора поблагодарили: aidsua (1). | |
|
|
#2 |
|
очами вижу
|
Цитата:
Сообщение от gl00mie
Можно - для этого в макросе надо вместо define'ов сразу писать текст (кусок кода, например), который вы хотите подставлять в местах использования макроса. В этих местах вам надо будет указать само название макроса с '#', см., например, макрос FilePathDelimiter. А, скажем, в макросе InventDimJoin можно посмотреть, как использовать переданные макросу параметры. Главное тут - не увлекаться, чтобы не ухудшать читаемость кода (см. A rant against flow control macros).
Мы видим, что в некоторых модулях проверяется наличие макроса never (для чего это сделано в данном случае неважно), но так как он не определен, код внутри этих команд препроцессора не компилируется. Желание таково: заставить компилироваться код внутри этих #if-ов. В C++ достаточно добавить такой дефайн в параметры компилятора, чтобы он был определен во всех модулях. Можно ли в аксапте сделать так же? |
|
|
|
|
#3 |
|
Участник
|
Цитата:
Сообщение от RumataEstor
Наверное, я в третий раз плохо описываю свое желание. Мы видим, что в некоторых модулях проверяется наличие макроса never (для чего это сделано в данном случае неважно), но так как он не определен, код внутри этих команд препроцессора не компилируется. Желание таково: заставить компилироваться код внутри этих #if-ов.
|
|
|
|
|
#4 |
|
Участник
|
Цитата:
Сообщение от gl00mie
Ну дык ить... я же написал: достаточно создать в узле AOT\Macros макрос с названием never и в этом макросе написать что-нить, например, просто "1" (без кавычек), после чего запустить глобальную компилляцию. Только это все теория - ни в коем случае не создавайте на самом деле такой макрос, а то поломаете приложение в куче мест!
Это должен быть именно #define.Something Макросы в АОТ не покатят. В ответ на вопрос RumataEstor: опять же, нет, думаю такого места нет |
|
|
|
| За это сообщение автора поблагодарили: gl00mie (5). | |
|
|
#5 |
|
очами вижу
|
Цитата:
Сообщение от gl00mie
Ну дык ить... я же написал: достаточно создать в узле AOT\Macros макрос с названием never и в этом макросе написать что-нить, например, просто "1" (без кавычек), после чего запустить глобальную компилляцию. Только это все теория - ни в коем случае не создавайте на самом деле такой макрос, а то поломаете приложение в куче мест!
Жаль |
|
|
|
|
#6 |
|
Участник
|
Цитата:
В общем, когда создается подузел в 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.
PS. Отсюда - мораль: надо чаще читать документацию
|
|
|
|
|
#7 |
|
Developer
|
Цитата:
Сообщение от gl00mie
Мда, действительно. Опять тут возникает некоторая путаница из-за "упрощенного" синтаксиса
В общем, когда создается подузел в AOT\Macros, то включить текст этого узла в код можно с помощью директивы #macrolib.имя_макроса_в_AOT, хотя допускается "сокращенный" вариант - просто #имя_макроса_в_AOT... |
|
|