Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.02.2014, 08:39   #1
androidz
 
Регистрация: 31.05.2009
Сообщений: 6
Восклицание Как преобразовать строку в название константу или её индификатор

Товарищи, подскажите как переданную 'строку' преобразовать в название константы или в её индификатор ?

Суть проблемы у меня в том что делаю серверное ПО для удаленного администрирования средством отправки консольных команд через ПО контроллер, разработано много различных команд , но вот загвоздка случилась в hooking реализации,
то есть я передаю команду : $hook Form1|TListBox|lb_addstring|text
и мне нужно чтобы lb_addstring определялась как имя константы либо как её индификатор $0180 .

писать условия распознавания для каждой константы, вообще не вариант, потому как нихочу лишним кодом забивать серверное ПО, а как преобразовать string в const не знаю, инет весь перерыл, не нашёл ничего по этому поводу, хотя допускаю что возможно искал как то не верно.
androidz вне форума Ответить с цитированием
Старый 27.02.2014, 09:08   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я не спец в этой области, но думаю тебе нужно почитать про RTTI, и классы работы с ним.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.02.2014, 09:34   #3
androidz
 
Регистрация: 31.05.2009
Сообщений: 6
По умолчанию

Если отправлять строку сразу индификатором $0180
и на серверной стороне конвертить в integer то проблемы как бы нет.

Но хотелось бы разобраться именно с возможностью передачи строк как имени констант, потому как эта тема мне много где ещё пригодилась бы, но инфы подходящей не нашёл.
androidz вне форума Ответить с цитированием
Старый 27.02.2014, 10:15   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Копайте в сторону RTTI. Хотя не уерен, что константы к ним относятся.
Человек_Борща вне форума Ответить с цитированием
Старый 27.02.2014, 12:53   #5
androidz
 
Регистрация: 31.05.2009
Сообщений: 6
По умолчанию

да натыкался я на RTTI когда гугл мучил, но не надыбал ничего подходящего )

с поиском компонентов по имени вообще проблем нет через findcomponent ,
а вот как с константами быть хз, если всё же через RTTI это как то можно сделать,
то хотелось бы пример функции тогда )

Последний раз редактировалось androidz; 27.02.2014 в 12:58.
androidz вне форума Ответить с цитированием
Старый 27.02.2014, 12:54   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от androidz Посмотреть сообщение
да натыкался я на RTTI когда гугл мучил, но не надыбал ничего подходящего )

с поиском компонентов по имени вообще проблем нет через findcomponent ,
а вот как с константами быть хз, если всё же через RTTI это как то можно сделать,
то хотелось бы пример функции тогда )
я думаю никак.
храните сами то что надо, через TStringList например.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 27.02.2014, 12:57   #7
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
scmd:=inttostr(lb_addstring);//при передаче

cmd:=strtoint(....);// при приеме
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 27.02.2014, 13:54   #8
androidz
 
Регистрация: 31.05.2009
Сообщений: 6
По умолчанию

evg_m, ну почти, единственное но, команды набиваются как string , как преобразовать string в constName ? в этом же вся загвоздка выходит

единственный выход какой я пока придумал это который я выше описывал:
Цитата:
Если отправлять строку сразу индификатором $0180
и на серверной стороне конвертить в integer то проблемы как бы нет.
то есть если передавать сам id строкой, то его на серве можно в integer конвертнуть, а если имя константы, то никак таки))

единственное писать условия, либо влить все константы в бд и запросами, но это лишний гемор выходит.
и если условиями то это вообще хрень потому как там 8 страниц констант))

Последний раз редактировалось androidz; 27.02.2014 в 14:02.
androidz вне форума Ответить с цитированием
Старый 27.02.2014, 14:42   #9
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

зайдем с другой стороны.
Цитата:
но, команды набиваются как string
т.е. пользователь должен помнить все команды а их ....
Цитата:
потому как там 8 страниц констант
Ладно считаем имеет ПЕЧАТНЫЙ справочник этих констант и стало быть худо-бедно помнит (или всегда может вспомнить)
теперь при наборе он должен ПРАВИЛЬНО набрать эти самые константы. а если ошибется? кто и главное когда ему это скажет?
т.е. мы не хотим гемора себе как программисту (один раз написать и "забыть") и перекладываем его пользователю(постоянно: помни читай проверяй) (опять же себе надеюсь).
Цитата:
и если условиями то это вообще хрень
простейшая БД в программе называется массив. поиском в такой БД является цикл.
усовершенствованная БД ресурсы программы и как уже упоминали TStringList для чтения из ресурсов и поиска. (была тема с моими ответами как использовать связку ресурсы + TstringList).
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 27.02.2014 в 14:46.
evg_m на форуме Ответить с цитированием
Старый 27.02.2014, 16:38   #10
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Лично для простого способа такой функциональности использую Enumerated types
которые являются именованными числовыми константами со специфической семантикой в языке
и GetEnumValue для преобразования строки в константу (наоборот - GetEnumName на этой же странице).
Способ работает в дельфи с 7 версии (более ранние не проверял). Правда есть заморочка - с "нумерованными" версиями enumerated types такое не работает (не поддерживает RTTI), поэтому только енумы с индексацией от 0 и без промежутков.

Для сложных случаев - TStringList и THashedStringList в качестве реализации ассоциативного массива, с методами поиска Find и IndexOf

Последний раз редактировалось phomm; 27.02.2014 в 16:42.
phomm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как преобразовать строку DimychX Работа с сетью в Delphi 10 23.02.2014 22:49
как преобразовать строку в вещественные числа Gennadiusisus Общие вопросы C/C++ 1 29.01.2014 20:48
Как преобразовать строку в имя компонента? IceExecutioner Компоненты Delphi 4 14.09.2011 07:32
Как переменную преобразовать в строку? clever77 Microsoft Office Excel 10 16.05.2011 10:23
Как преобразовать UINT в строку? Сильванович Михаил Общие вопросы C/C++ 2 12.07.2007 09:58