Страница 1 из 1

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

Добавлено: 29 мар 2010, 18:52
VAlch
Здравствуйте, уважаемые форумчане!
Недавно начал работать с 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. Спасибо.

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

Добавлено: 29 мар 2010, 23:06
Duncon
В лес .NET пиши на API везде будет работать..
А вообще может не работать из-за того что на 64 битной откомпелированно (числа больше) 32 под 64 работать должны а вот в обратную сторону врядле.

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

Добавлено: 29 мар 2010, 23:15
VAlch
Duncon писал(а):В лес .NET пиши на API везде будет работать..
А вообще может не работать из-за того что на 64 битной откомпелированно (числа больше) 32 под 64 работать должны а вот в обратную сторону врядле.
В том-то и дело, что dll написана на C++, возможно где-то зацепил какой-то класс MFC, но в дотнет не лез. Компилировал и под 64 и под 32 разрядную систему. Эффекта ноль. Кроме того тесты велись на 64х разрядной машине, также как и разработка.

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

Добавлено: 30 мар 2010, 10:31
Duncon
Значит ошибка в коде, С++ не API

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

Добавлено: 30 мар 2010, 11:22
Eugie
К сожалению, вы не привели текст ошибки полностью, но похоже, проблема с зависимостями. В прежних версиях MSVS был замечательный инструмент Dependency Walker (depends.exe); в поставку 2008 он не включен, но можно его свободно скачать с сайта http://www.dependencywalker.com/

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

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

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

Добавлено: 30 мар 2010, 19:11
VAlch
Регистрация прошла успешно после установки на клиентской машине пакета Microsoft Visual C++ 2008 Redistributable Package. Как можно сделать чтобы не таскать этот пакет с длл а все необходимое засунуть в длл при компиляции?

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

Добавлено: 30 мар 2010, 19:43
Eugie
Используйте статическое связывание. Следующие опции должны быть включены:
- 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

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

Добавлено: 30 мар 2010, 19:59
VAlch
Eugie, большое спасибо за подробный ответ. Буду пробовать.