Re: Вызов выполнения функции через динамическое имя
От: EyeOfHell  
Дата: 28.04.07 11:06
Оценка:
Здравствуйте, Аноним, Вы писали:


Вот узнал (спасибо open-source'у ), что с помощью макросов типа
#define glue( x, y ) x ## y
можно "сшивать" имена в коде статически.
И стало интересно, можно ли такое провернуть динамически?
Интересно как для Windows так и для Linux. Если кто знает, подскажите пожалуста.


Не совсем понятен вопрос. Что значит 'такое провернуть диначмиески'? Образец псевдокода?

Когда в C++ пишется

int nVar;
nVar = 0;


То при изготовлении .exe файла 'nVar' заменяется адресом — на стеке там или где удобно. Соответственно, с точки зрения получения кода из исходника, имя переменной nVar — это удобно читаемый человеком адрес в памяти, размером в N байт. Непосредственно при выполнении программы в ней ТЕКСТ 'nVar' не учавствует — только цифра, обозначающая адрес (смещение в случае стека). Как можно в рантайме склеивать то, чего в рантайме по определению нет?

Получается если бы я зашил функции в длл то используя GetProcAddress() можно получить адрес функции исспользуя ее имя.
Можно ли использовать GetProcAddress() также и для выполняемого в данное время ехе-модуля получив его Handle?


Чтобы получить адрес функции с помощью GetProcAddress, эта функция должна быть прописана в .exe файле в разделе 'торчащие наружу функции' (export table). Если функции в этой таблице нету (обычно для .exe), то нет и ее имени.

Или лучше использовать какую-то свою таблицу для соответствия имени фукции и ее адреса?


Лучше — для чего? Есть какая-то задача которую нужно решить или просто хочется задней левой пяткой почесать правое верхнее ухо?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.