Проблема с регистрацией dll

Общие вопросы, не зависящие от языка реализации.

Модераторы: Duncon, Hawk, Romeo, Eugie

Ответить
VAlch
Сообщения: 6
Зарегистрирован: 29 мар 2010, 18:49

Здравствуйте, уважаемые форумчане!
Недавно начал работать с MSVS2008 и столкнулся со следующей проблемой:
Написал расширение оболочки по статье http://www.rsdn.ru/article/winshell/shlext1.xml
(т.е. имеет место ATL COM проект на выходе которого dll). Отладил, откомпилировал на своей машине под Windows 7 x64. Все работает, все ок. Пытаюсь зарегистрировать данную dll на машине пользователя, на этапе регистрации получаю ошибку "Не удалось загрузить модуль my.dll ..." Возможно ошибка в разных версиях msvcr80.dll. Библиотека .NET Framework у пользователя установлена. Подозреваю, что нужно что-то изменить в настройках проекта перед компиляцией, что-то в сторону Runtime Libray = Multi-threaded (/MT). Но все равно ругается. Подскажите, пожалуйста по пунктам, какие настройки были выставлены, чтобы все необходимые dll были при компиляции подключены в мою my.dll. Спасибо.
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

В лес .NET пиши на API везде будет работать..
А вообще может не работать из-за того что на 64 битной откомпелированно (числа больше) 32 под 64 работать должны а вот в обратную сторону врядле.
[syntax=Delphi] [/syntax]
VAlch
Сообщения: 6
Зарегистрирован: 29 мар 2010, 18:49

Duncon писал(а):В лес .NET пиши на API везде будет работать..
А вообще может не работать из-за того что на 64 битной откомпелированно (числа больше) 32 под 64 работать должны а вот в обратную сторону врядле.
В том-то и дело, что dll написана на C++, возможно где-то зацепил какой-то класс MFC, но в дотнет не лез. Компилировал и под 64 и под 32 разрядную систему. Эффекта ноль. Кроме того тесты велись на 64х разрядной машине, также как и разработка.
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Значит ошибка в коде, С++ не API
[syntax=Delphi] [/syntax]
Eugie
Сообщения: 708
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

К сожалению, вы не привели текст ошибки полностью, но похоже, проблема с зависимостями. В прежних версиях MSVS был замечательный инструмент Dependency Walker (depends.exe); в поставку 2008 он не включен, но можно его свободно скачать с сайта http://www.dependencywalker.com/
VAlch
Сообщения: 6
Зарегистрирован: 29 мар 2010, 18:49

2 Duncon: Но ведь на машине где велась разработка dll регистрация проходит без ошибок, причем и 32х и 64х.
2 Eugie: Спасибо за совет, вначале выясню зависимости, попытаюсь просто перекинуть эти библиотеки на тестовую машину, если все получится, буду думать как все это вместе объединить.
VAlch
Сообщения: 6
Зарегистрирован: 29 мар 2010, 18:49

Регистрация прошла успешно после установки на клиентской машине пакета Microsoft Visual C++ 2008 Redistributable Package. Как можно сделать чтобы не таскать этот пакет с длл а все необходимое засунуть в длл при компиляции?
Eugie
Сообщения: 708
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

Используйте статическое связывание. Следующие опции должны быть включены:
- Use MFC in a Static Library
- Static Link to ATL
- Runtime Library: Multi-threaded (/MT)

Обзорная статья в MSDN: http://msdn.microsoft.com/en-us/library/zebw5zk9.aspx
VAlch
Сообщения: 6
Зарегистрирован: 29 мар 2010, 18:49

Eugie, большое спасибо за подробный ответ. Буду пробовать.
Ответить