|
Как найти функцию по ее имени?
|
|||
---|---|---|---|
#18+
Доброго дня! Продолжаю терзать embedded C++. Возникла необходимость поиска функции по ее имени (строка символов, например "myFunc") с дальнейшем присваиванием ей параметра типа wstring и запуска. Функция возвращает тоже wstring. В Дельфи для этого есть процедурный тип, есть ли аналог в C++? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2018, 09:40 |
|
Как найти функцию по ее имени?
|
|||
---|---|---|---|
#18+
Если функция есть в таблице экспорта, то GetProcAddress() ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2018, 09:49 |
|
Как найти функцию по ее имени?
|
|||
---|---|---|---|
#18+
Я пишу на С/С++ уже 18 лет и каждый раз, когда я встречаю подобный вопрос, то я не понимаю как автор дошел до такого, что он не знает, где у него какая функция и требуется поиск в run-time. На мой взгляд, если у тебя возникают подобные проблемы это свидетельствует о плохом дизайне твоего приложения и он должен быть пересмотрен. Для всего остального, вроде скриптовых языков, есть IDispatch . Если нужно узнать имя исполняемой кодом функции то используешь макрос __FUNCTION__ ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2018, 09:57 |
|
Как найти функцию по ее имени?
|
|||
---|---|---|---|
#18+
Sergey_rbDima TЕсли функция есть в таблице экспорта, то GetProcAddress() Имеется ввиду работа с DLL? Обычно экспортируют в DLL, но при желании можно и в EXE. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2018, 09:59 |
|
Как найти функцию по ее имени?
|
|||
---|---|---|---|
#18+
CerebrumЯ пишу на С/С++ уже 18 лет и каждый раз, когда я встречаю подобный вопрос, то я не понимаю как автор дошел до такого, что он не знает, где у него какая функция и требуется поиск в run-time. На мой взгляд, если у тебя возникают подобные проблемы это свидетельствует о плохом дизайне твоего приложения и он должен быть пересмотрен. Для всего остального, вроде скриптовых языков, есть IDispatch . Если нужно узнать имя исполняемой кодом функции то используешь макрос __FUNCTION__ Программе, передается извне, имя функции и параметры, которые она должна выполнить. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2018, 10:02 |
|
Как найти функцию по ее имени?
|
|||
---|---|---|---|
#18+
Sergey_rb, COM + IDispatch ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2018, 10:04 |
|
Как найти функцию по ее имени?
|
|||
---|---|---|---|
#18+
Sergey_rbПрограмме, передается извне, имя функции и параметры, которые она должна выполнить. или выноси эти функции в DLL и используй GetProcAddress, как уже предложили ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2018, 10:08 |
|
Как найти функцию по ее имени?
|
|||
---|---|---|---|
#18+
CerebrumSergey_rbПрограмме, передается извне, имя функции и параметры, которые она должна выполнить. или выноси эти функции в DLL и используй GetProcAddress, как уже предложили Видимо, это самый оптимальный вариант. В Дельфи, эти функции объявляются в разделе published и находятся по имени через MethodAddress ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2018, 10:13 |
|
Как найти функцию по ее имени?
|
|||
---|---|---|---|
#18+
Cerebrum example Это ужасно, особенно тёплые-ламповые скриншоты MSVS 6. Не уж то за 20 лет не придумали чего-нибудь более удобного чем вся эта куча бойлерплейта, в котором легко допустить ошибку? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2018, 10:16 |
|
Как найти функцию по ее имени?
|
|||
---|---|---|---|
#18+
CerebrumSergey_rbПрограмме, передается извне, имя функции и параметры, которые она должна выполнить. или выноси эти функции в DLL и используй GetProcAddress, как уже предложили Не обязательно выносить в DLL, экспортировать можно в EXE, но искать и вызывать можно будет только изнутри этого EXE, но в данном случае это подходит. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2018, 10:20 |
|
Как найти функцию по ее имени?
|
|||
---|---|---|---|
#18+
NekZCerebrum example Это ужасно, особенно тёплые-ламповые скриншоты MSVS 6. Не уж то за 20 лет не придумали чего-нибудь более удобного чем вся эта куча бойлерплейта, в котором легко допустить ошибку? Я пишу на embedded C++, там и такого щастья нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2018, 10:21 |
|
Как найти функцию по ее имени?
|
|||
---|---|---|---|
#18+
NekZ, C/C++ вообще языки, использование которых суть всегда хотьба по канату без страховки. Для всех остальных, кто боится испачкать руки есть PowerShell и .Net ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2018, 10:22 |
|
Как найти функцию по ее имени?
|
|||
---|---|---|---|
#18+
Так работает внутри EXE Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2018, 10:31 |
|
Как найти функцию по ее имени?
|
|||
---|---|---|---|
#18+
Dima TТак работает внутри EXE Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Спасибо! Сделал по примеру, функция появилась в списке экспортируемых функций, но по имени не находится. Подозреваю, что дело в кодировке , т.к. чтобы проект откомпилировался, приходится добавлять L перед именем функции Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2018, 10:49 |
|
Как найти функцию по ее имени?
|
|||
---|---|---|---|
#18+
Sergey_rbDima TТак работает внутри EXE Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Спасибо! Сделал по примеру, функция появилась в списке экспортируемых функций, но по имени не находится. Подозреваю, что дело в кодировке , т.к. чтобы проект откомпилировался, приходится добавлять L перед именем функции Код: plaintext 1.
Если не ставить L перед "text_exp" , то ошибка Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2018, 11:06 |
|
Как найти функцию по ее имени?
|
|||
---|---|---|---|
#18+
Если делать так Код: plaintext 1.
то все равно не находится. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2018, 11:12 |
|
Как найти функцию по ее имени?
|
|||
---|---|---|---|
#18+
Sergey_rb, а так?: Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2018, 11:23 |
|
Как найти функцию по ее имени?
|
|||
---|---|---|---|
#18+
Sergey_rbЕсли не ставить L перед "text_exp" , то ошибка Ошибка потому что у тебя проект юникодный, значит надо ставить L. У меня проект не юникодный, мне не надо ставить. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2018, 11:24 |
|
Как найти функцию по ее имени?
|
|||
---|---|---|---|
#18+
Sergey_rbЕсли делать так Код: plaintext 1.
то все равно не находится. Ты просто используй имена, которые реально экспортируются dll - http://www.dependencywalker.com/ Может, там и нет того, что ты ищешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2018, 11:28 |
|
Как найти функцию по ее имени?
|
|||
---|---|---|---|
#18+
rdb_devSergey_rb, а так?: Код: plaintext 1.
Код Код: plaintext 1.
Ошибка автор error C2440: 'type cast' : cannot convert from 'char [9]' to 'class std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> >' ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2018, 11:28 |
|
Как найти функцию по ее имени?
|
|||
---|---|---|---|
#18+
КотовасияSergey_rbЕсли делать так Код: plaintext 1.
то все равно не находится. Ты просто используй имена, которые реально экспортируются dll - http://www.dependencywalker.com/ Может, там и нет того, что ты ищешь. Я открываю exe в TotalCommander через F3 В разделе экспорта вижу экспротированную функцию test_exp Думаю, что дело все таки в кодировках. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2018, 11:31 |
|
|
start [/forum/topic.php?fid=57&msg=39715925&tid=2017743]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
36ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
others: | 261ms |
total: | 408ms |
0 / 0 |