Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Переменные :( |
Автор: Sheff 14.7.2002, 17:03 | ||||
Я создал DLL в которой стоит системная ловушка, там объявлена переменная, вот так:
Затем другая программа вызывает функцию из этой DLL, которая ставит Hook и изменяет переменную в TRUE:
Но потом оказвается, что bNorm так и осталась FALSE ![]() Что делать, как изменить значение переменной ![]() P.S: Ради интереса я написал в DllMain bNorm=TRUE, получилось ![]() |
Автор: Baa 14.7.2002, 21:04 |
Пробуй менять через указатель ![]() |
Автор: Sheff 14.7.2002, 21:15 |
Пробовал, не получается |
Автор: podval 15.7.2002, 09:53 | ||
сможешь изменить, если уберешь static. Это очень грозное ключевое слово! ![]()
|
Автор: Sheff 15.7.2002, 11:26 |
Убирал, всё равно не получается, просто фигня какая-то, уже не знаю, что делать, а сделать это надо срочно ![]() |
Автор: fox 15.7.2002, 13:02 |
Кажется я сталкивался с такой проблемой, и дело здесь во в чем: DLL загружается в область того процесса, который с ней работает и глобальные переменные, определенные в DLL имеют свои значения в каждом процессе, в который подгружается DLL. Поэтому если одна программа (процесс) изменила переменную DLL, то другая программа (процесс) этого никогда не увидит |
Автор: Sheff 15.7.2002, 17:52 | ||
Дык как ж мне быть ? ![]() |
Автор: Fantasist 16.7.2002, 12:04 |
Fox прав, в принципе. Сегмент данных dll для каждого процесса который его подгружает свой (как и сегмент кода, в общем, но коду то все равно - выполняется и выполняется), однако есть и разделямый сегмент данных. Но это имеет смысл, тольлко если несколько процессов погружают эту dll и пытаются изменять глобальные переменные этой dll, которые свои, на самом деле, для каждого процесса. Есть вопрос как ты пытаешься изменить свою переменную, и как ты загружаешь свою dll. Короче, самый правильный способ был бы, если ты вызываешь функцию dll, которая и меняет это значение. Примерно так: static BOOL bNorm = FALSE; void SetbNorm(bool Value) { bNorm=Value; } А потом в своей программе: SetbNorm(TRUE); Если же тебя интересует разделение этой переменной между разными процессами, то вопрос отдельный. |
Автор: Sheff 16.7.2002, 13:46 |
DLL загружается неявно и привязана к 1 процессу, к моей exe'шке. 2 Fantasist: Этот способ не подходит, т.к я так в принципе и делал, вызывал функцию из DLL, которая "меняла" значение переменной. |
Автор: Fantasist 16.7.2002, 14:14 |
Тогда что еще можно сказать? Трассируй. Посмотри как она себя ведет - наверное ошибка где-то в другом. Типа не заметил, как где-то ее еще кто-то поменял или воспользовался тем же именем, но для локальной переменной. Попробуй, в конце концов без инициализации. |