| Опции темы | Поиск в этой теме |
|---|
ksili
| 22.09.2009 02:55 Проблема взаимодействия 32-битного приложения и 64-битной библиотеки | ||||
Разрабатывается 32-разрядное приложение. Сначала оно делалось под Windows XP, потом заказчик захотел, чтобы оно работало и под Висту с 7-кой. Поправили. Но теперь он возжелал, чтобы оно ещё работало и в 64-разрядных версиях Висты и Win7. И вот здесь появилась проблема. Специфика программы такова, что она внедряет во все другие визуальные приложения свою DLL. А затем в некоторых случаях общается с ними посредством сообщений. В 64-битных виндах было замечено, что не все приложения "контачат" с нашим. Оказалось, что 32-битные приложения в Windows не могут загружать 64-битные DLL (и наоборот), а в 64-битные процессы может быть внедрена только 64-битная DLL. Соответственно все 64-битные программы оказывались для нас как бы невидимы. Был найден следующий выход. Собираются 2 версии нашей библиотеки 32 и 64-бит. Основная программа после внедрения 32-битной библиотеки проверяет, не 64-битная ли Windows? Если да, то запускается отдельная 64-битная программа (без окна), которая уже внедряет 64-битную версию той же DLL (которой передаётся хэндл основной программы, чтобы она знала, с кем общаться). И вот здесь имеено проблема: 64-битная DLL загружается, но не внедряется. Дальше приведу код с комментариями. Может я вообще что-то не то делаю? Полностью весь код того маленького 64-битного приложения, которое должно внедрить 64-битную библиотеку: #include "stdafx.h" trace'ы это запись в лог. В функции SetFWHook просто ставится или снимается глобальный хук при помощи функции SetWindowsHookEx: SetWindowsHookEx(WH_GETMESSAGE, GetPostMsgProc, g_hinstDll, dwThreadId); В логе запись "64-bit DLL loaded" появляется, однако запись "SetFWHook procedure found" не появляется никогда. То есть получается, что функция GetProcAddress не выполняется. MSDN говорит, что эта функция находится в Kernel32.dll, что косвенно говорит о том, что в 64-й винде она может быть реализована по-другому? Или надо использовать другую функцию? Какие ещё идеи? Усложняется ещё тем, что у меня самого процессор и соответственно ОС - 32-битные ((. т.е. самому много тестов мне сделать затруднительно. Я делаю, заказчик у себя запускает и сообщает какие изменения. P.S. Как тут сделать подсветку синтаксиса, не разобрался. Вставлялка кода по-моему просто убирает все переносы строк, и пишет весь код в один абзац. | |||||
|
|||||||||||||
|
|||||||||||||
|
|||||||||||||
|
|||||||||||||
|
|||||||||||||
|
|||||||||||||
| 246 пользователей 277 тем и 2036 сообщений. |
|---|
| За последние 24 часа появилось 0 новых тем 0 новых сообщений и 0 новых пользователей Самая популярная тема за последние 3 дня Найди ошибки. Пример 2. Больше всего ответов отправлено на сообщение Найди ошибки. Пример 2. Наибольшее количество просмотров у сообщения Здравствуйте,П Приветствуем нового пользователя chat1983 |