Два (три, четыре...) разных модуля внутри одного процесса. Один должен сохранить некое значение (DWORD), а остальные его считать. Как можно реализовать, помимо экспортируемой переменной?
Squash Написать ф-ию, которая возвращает адрес DWORD'а? Но тогда придется экспортировать ф-ию. Извратный вариант: поместить переменную в структуру между двумя переменными, дать переменным уникальное значение и искать их в секции данных. Т.е. что-то типа: struct MY_SECRET_VARIABLE { BYTE SignStart[16]; DWORD TargetVariable; BYTE SignEnd[16]; }; MY_SECRET_VARIABLE Var = { { x, x, ... }, SecretVar, { y, y, ... } }; Находим модуль в памяти, находим сигнатуры в секции данных, извлекаем значение переменной, PORFIT!!!1111
shchetinin, да-да надо что-то вроде, раскройте тему плз. Только TLS наверное не годится, что там с потоками непонятно.
я б организовал небольшой менеджер. строк на 10-20. причина простая - модули, особенно разнопоточные, могут не знать, что ктото изменил эту переменную. а с менеджером и калбеками задача сильно упрощается и универсализуется
Squash через полнедели может стать нужно. будете править весь код? но дело ваше. если это не вирь, то лучше и проще всего (и безглючнее в будущем) сделать функи на чтение и запись и к переменной обращаться именем (строкой). АДД обязательно обрамив само чтение/запись локами
Squash Environment variable: GetEnvironmentvariable\SetEnvironmentvariable (Одно из самых правильных ).
Обычно используются специальные сегменты. Вот например нужно из любого модуля текущий PID узнать - читаем из Fs:[0x20]. Тут константы две - селектор сегмента и смещение в сегменте до переменной. Это самый эффективный путь. Именованные обьекты не вариант, ибо они глобальны.