Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Можно ли с одного проекта сбилдить за раз две DLL? 32-bit и 64-bit. MSVS 2008 
:(
    Опции темы
ksili
Дата 24.8.2009, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: 1
Всего: 17



Есть проект в Visual Studio 2008. В нём билдится 32-разрядная dll. Но тут оказалось, что в 64-битные процессы 32-битная библиотека внедриться не может. Поэтому надо делать ещё и 64-разрядную версию данной dll.

Отсюда вопросы:
1) Можно ли на 32-раязрядной машине в 32-разрядной ОСи собрать 64-битную библиотеку?
Если да, то
2) Какие флажки в настройках проекта в студии надо выставить, чтобы собрать такую библиотеку? Ещё что-то кроме этих флажков надо делать?
3) Можно ли в студии не создавая второй проект (копию первого) билдить сразу две версии файла: 32-х и 64-разрядную?


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Earnest
Дата 26.8.2009, 08:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



Насчет флажков, какие нужно ставить, не подскажу, но из одного проекта вполне можно, если код написан переносимо. Есть конфигурации - можно нарисовать их много - они как раз установками проекта и отличаются (ну как дебаг и релиз). И есть Batch Build - так что можно, действительно, 2 одновременно построить.


--------------------
...
PM   Вверх
GremlinProg
Дата 26.8.2009, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



да, в Configuration Manager'е нужно добавить платформу x64, после чего она станет доступна на уровне Win32,
можно ее выбирать, настраивать, полученный образ уже будет в PE64, только отлаживать его из 32-битной не получится,
но можно воспользоваться удаленным отладчиком с 64-битной платформы

Добавлено через 2 минуты и 11 секунд
или из под вари (vmware)


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
ksili
Дата 8.9.2009, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: 1
Всего: 17



Чё-то у меня в Configuration Manager'е платформа x64 не добавляется. Подозреваю, что я не поставил какие-то галочки когда ставил студию. Попробую переустановить.

Но кроме билда есть ещё такой вопрос: допустим, я при помощи batch build'a (или вручную по очереди) соберу 2 библиотеки - hook.dll и hook64.dll. Как я уже упоминал, они должны будут внедряться в другие процессы. А вот здесь кроется такая проблема. 
Сейчас внедрение сделано при помощи функции SetWindowsHookEx следующим образом. Из приложения вызывается функция в dll-ке, внутри которой выполняется строчка:
Код

g_hhookSend = SetWindowsHookEx(WH_GETMESSAGE, GetPostMsgProc, g_hinstDll, dwThreadId);


g_hinstDll - это глобальная переменная типа HINSTANCE, объявленная в библиотеке. Для разных библиотек она должна быть разная, но у меня же проект один! Получается всё-таки надо создавать второй такой же проект? Или просто переделать установку хука?

Нашёл в сети вот такой код:
Код

HMODULE hookDll = LoadLibrary(_T("F:\\project\\Debug\\zrh64.dll"));
HOOKPROC hookProc = (HOOKPROC)GetProcAddress(hookDll,"myMouseProc");
SetWindowsHookEx(WH_MOUSE, hookProc, hookDll, 0);

Но там не сказано, что он рабочий. 


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
GremlinProg
Дата 14.9.2009, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Цитата(ksili @  8.9.2009,  11:20 Найти цитируемый пост)

Код

HMODULE hookDll = LoadLibrary(_T("F:\\project\\Debug\\zrh64.dll"));
HOOKPROC hookProc = (HOOKPROC)GetProcAddress(hookDll,"myMouseProc");
SetWindowsHookEx(WH_MOUSE, hookProc, hookDll, 0);


если это код из 32-битного процесса, а zrh64.dll - 64-битный образ (а иначе - какой в нем смысл),
скорее всего, тут не пройдет даже первый вызов LoadLibrary,
иначе - это штатная установка глобального хука в 64-битном процессе


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0438 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.