![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Sheff |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 503 Регистрация: 25.3.2002 Где: Зеленоград Репутация: 3 Всего: 3 |
Я создал DLL в которой стоит системная ловушка, там объявлена переменная, вот так:
Затем другая программа вызывает функцию из этой DLL, которая ставит Hook и изменяет переменную в TRUE:
Но потом оказвается, что bNorm так и осталась FALSE ![]() Что делать, как изменить значение переменной ![]() P.S: Ради интереса я написал в DllMain bNorm=TRUE, получилось ![]() -------------------- -------------------------- Шеф всегда прав :) |
||||
|
|||||
Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: 8 Всего: 12 |
Пробуй менять через указатель
![]() -------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
Sheff |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 503 Регистрация: 25.3.2002 Где: Зеленоград Репутация: 3 Всего: 3 |
Пробовал, не получается
-------------------- -------------------------- Шеф всегда прав :) |
|||
|
||||
podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 1 Всего: 62 |
сможешь изменить, если уберешь static.
Это очень грозное ключевое слово! ![]()
|
|||
|
||||
Sheff |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 503 Регистрация: 25.3.2002 Где: Зеленоград Репутация: 3 Всего: 3 |
Убирал, всё равно не получается, просто фигня какая-то, уже не знаю, что делать, а сделать это надо срочно
![]() -------------------- -------------------------- Шеф всегда прав :) |
|||
|
||||
fox |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 10.4.2002 Репутация: нет Всего: нет |
Кажется я сталкивался с такой проблемой, и дело здесь во в чем:
DLL загружается в область того процесса, который с ней работает и глобальные переменные, определенные в DLL имеют свои значения в каждом процессе, в который подгружается DLL. Поэтому если одна программа (процесс) изменила переменную DLL, то другая программа (процесс) этого никогда не увидит |
|||
|
||||
Sheff |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 503 Регистрация: 25.3.2002 Где: Зеленоград Репутация: 3 Всего: 3 |
Дык как ж мне быть ? ![]() -------------------- -------------------------- Шеф всегда прав :) |
|||
|
||||
Fantasist |
|
|||
![]() Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Fox прав, в принципе. Сегмент данных dll для каждого процесса который его подгружает свой (как и сегмент кода, в общем, но коду то все равно - выполняется и выполняется), однако есть и разделямый сегмент данных. Но это имеет смысл, тольлко если несколько процессов погружают эту dll и пытаются изменять глобальные переменные этой dll, которые свои, на самом деле, для каждого процесса. Есть вопрос как ты пытаешься изменить свою переменную, и как ты загружаешь свою dll. Короче, самый правильный способ был бы, если ты вызываешь функцию dll, которая и меняет это значение. Примерно так:
static BOOL bNorm = FALSE; void SetbNorm(bool Value) { bNorm=Value; } А потом в своей программе: SetbNorm(TRUE); Если же тебя интересует разделение этой переменной между разными процессами, то вопрос отдельный. -------------------- Волны гасят ветер... |
|||
|
||||
Sheff |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 503 Регистрация: 25.3.2002 Где: Зеленоград Репутация: 3 Всего: 3 |
DLL загружается неявно и привязана к 1 процессу, к моей exe'шке.
2 Fantasist: Этот способ не подходит, т.к я так в принципе и делал, вызывал функцию из DLL, которая "меняла" значение переменной. -------------------- -------------------------- Шеф всегда прав :) |
|||
|
||||
Fantasist |
|
|||
![]() Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Тогда что еще можно сказать? Трассируй. Посмотри как она себя ведет - наверное ошибка где-то в другом. Типа не заметил, как где-то ее еще кто-то поменял или воспользовался тем же именем, но для локальной переменной. Попробуй, в конце концов без инициализации.
-------------------- Волны гасят ветер... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |