143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
||||||
1 | ||||||
Поиск макроса, принимающего строку как параметр23.08.2014, 04:55. Показов 2227. Ответов 45
Метки нет (Все метки)
Можно ли данный пример переделать, только чтоб в макрос входила строка, т.е. так: SHOW_DEFINE("WS_VISIBLE");
Пробовал сам удалять stringizing операторы, но что то не получилось.
0
|
23.08.2014, 04:55 | |
Ответы с готовыми решениями:
45
Как передать параметр в запрос не из диалога, а из макроса? Как подставить значение макроса в строку? Параметр в строку подставить как? Как при помощи макроса определить последнею строку в таблице |
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
23.08.2014, 15:22 | 21 |
Значит, создаем ассоциативный контейнер, где ключом будет строка - имя макроса, а значением - собственно, его значение типа DWORD: map<std::string, DWORD>.
Заполняем полностью где-нибудь в коде. В интерфейс выводим строки, по выбранным элементам получаем значения. Если удобнее обращаться не по именам, а по индексам - заводим массив структур, где в элементе структуры - имя и значение.
0
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|
23.08.2014, 15:27 [ТС] | 22 |
0x10, а без всяких map и т.п. никак? (по проще как то хочется, без эвереста^^)
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
||||||
23.08.2014, 15:30 | 23 | |||||
Izual, куда уж проще?
0
|
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
|
|
23.08.2014, 15:31 | 24 |
такие штуки реально сильно упрощают задачу, а освоить их займет очень немного времени. В любом случае, свой контейнер реализовывать не многим быстрее, но каждый раз заново, а тут уже готовенькое и отлаженное.
0
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|
23.08.2014, 15:33 [ТС] | 25 |
без векторов, без STL, без boost, без классов. Что то очень простое, как был тот дефайн.(что то приближенное к Си)
Ууу, я только заметил, что вы на каждый макрос пишите его название статическим способом: Таким же макаром и я могу без векторов сделать, но исходя из того что макросов в WinApi туча, то это не вариант.
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
23.08.2014, 15:34 | 26 |
0
|
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
|
||||||||||||||||
23.08.2014, 15:39 | 27 | |||||||||||||||
Видимо, SHOW_DEFINE(WS_VISIBLE) преобразуется таким образом. Сначала будет подставлен WS_VISIBLE вместо x в определение SHOW_DEFINE(x)
0
|
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
|
|
23.08.2014, 15:39 | 28 |
Поразительная логика: использовать готовые решения - сложно, писать свои велосипеды - легко
0
|
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
|
|
23.08.2014, 15:40 | 29 |
Добавлю чисто для информации пару особенностей макросов:
!!Во время группировки аргументов раскрытие макросов в них не выполняется. !!Если в замещающей последовательности перед параметром не стоит знак #, если и ни перед ним, ни после него нет знака ##, то лексемы аргумента проверяются на наличие в них макровызовов; если таковые есть, то до подстановки аргумента в нем выполняется раскрытие соответствующих макросов. Это в вики в статье про препроцессор Сишки есть. Рекомендую к ознакомлению.
0
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|
23.08.2014, 15:48 [ТС] | 30 |
Я вам на это вот такую фразу дам "Что толку весь мир преобрести, а душу свою безсмертную потерять". Аналогию проведите. Вся проблема в том что я считаю что map, vector, stl, class - всё это настолько усложняет код, что потом чтобы прочесть код, надо тремя потами истечь - "овчинка выделки не стоит", я лучше стандартными Си методами буду пользоваться, они понятны и приятны.
Читал частично, но искал другое, потому наверно и не обратил внимание.
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
23.08.2014, 15:51 | 31 |
В общем, так. Решение предложено. Какие инструменты выбрать для его реализации - за автором. А холиварить и убеждать в своей правоте можно бесконечно долго.
0
|
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
|
|
23.08.2014, 15:56 | 32 |
Подозреваю, что для многих это лишь облегчает код. Сколько людей, столько и мнений. Если ваш проект никто не будет потом разбирать, то делать велосипеды, а то и колеса изобретать, даже полезно бывает. Делайте как вам удобно. Но в основном понятными другим являются как раз таки они, а не самодельные велосипеды.
Добавлено через 52 секунды Поддерживаю. Клаву в руки и вперед!
0
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|
23.08.2014, 16:00 [ТС] | 33 |
Смешно, ну опишите в матрице(2х) 10000 макросов DWORD и 10000 их названий, я и посмотрю как вы скажете про "найденное решение".
Никто ни кого не убеждает и не холиварит, если только вы сами эти эмоции не вкладываете в свои посты. Я лишь сказал те факторы, которые мною движут, и мне глубоко пофиг принимаете вы их или нет, ваша жизнь - ваши мысли. Задача не решена, писать матрицу для 10000 макросов - не вариант. Добавлено через 3 минуты Я сам его буду разбирать, и не хочу чтоб меня стошнило. Простота - это то от чего я не хочу уходить. Если нет карты, то и капать нет смысла, т.к. не знаеш где, а С++ как планета, настолько большой, что без карты или компаса не возможно.
0
|
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
|
||||||
23.08.2014, 16:00 | 34 | |||||
Можно создать такой файл
0
|
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
|
|
23.08.2014, 16:03 | 35 |
Ну они же как-то описаны в исходниках. напишите парсер самих исходников, который вытащит их в отдельный файл и используйте его.
0
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|
23.08.2014, 16:10 [ТС] | 36 |
Alex5, можно, но это копипаста файла winuser.h. Я потому и создал тему чтоб обойти копипасту, лучше было бы иметь одинарный массив, тем более что к каждой функции свои макросы к выбору представляются...
П.С. Если задачу не решить в рантайме, то возможно есть способ прочесть winuser.h как файл?(не копируя сам файл, а загрузив например библиотеку user32.dll) Добавлено через 1 минуту Угу, в компании Microsoft тысячи сотрудников))
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
23.08.2014, 16:11 | 37 |
Пока я о нем могу сказать одно - оно работает и тем самым лучше вообще нереализуемого.
Как уже сказали выше, такой исходник можно и сгенерить. Даже не умным парсером, а банальным grep + sed/awk или редактором с курсорами в нескольких строках. Но прежде чем браться за автоматизацию, вопрос: а в рассматриваемом случае их сколько? Десяток, два? Если так, то оно не стоит и попыток автоматизации. Иначе - см выше, автоматизируется легко.
0
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|
23.08.2014, 16:15 [ТС] | 38 |
Их столько, сколько подключается файлов и функций через user32.dll, kernel32.dll и др. стандартные библиотеки. Думаю что больше 10000.
Хорошо, парсер, тогда можно ли файл, скажем, winuser.h вытащить из библиотеки и открыть через fopen? (не хочется копировать файл)
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
23.08.2014, 16:16 | 39 |
0
|
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
|
|
23.08.2014, 16:16 | 40 |
Ну вы же замахнулись на переопределение их всех) Да и что же за программа, в которой юзеру можно динамически использовать 10000 параметров?
В общем либо парсер, либо по кусочкам в ручную, по мере реализации функционала. Больше вариантов тут пока нет. В голову ничего тоже не лезет.
0
|
23.08.2014, 16:16 | |
23.08.2014, 16:16 | |
Помогаю со студенческими работами здесь
40
Можно ли передать строку, как параметр? Как в функцию передать параметр строку? Как вернуть удаленную строку после выполнения макроса Rows(n).Delete Получить строку GET запроса, как параметр файла Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |