| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > переход с VC++60 на VC++2008 проблема с DLL |
| Автор: Dmitriy2k 2.3.2009, 16:23 | ||||
| Я перешел с vc++60 на vc++ 2008 мой проект довольно большой, состоит из exe и нескольких dll на vc++60 все компилируется без единой ошибки, да и теперь на vc++2008 компилируется без ошибок, но c работоспособностью dll появились проблемы. dll подгружается,ошибок нет:
А вот функция не подгружается, выдает NULL. в vc60 все работало.
Подскажите, что делать? |
| Автор: Earnest 2.3.2009, 16:37 | ||||
| Проще всего построить map-файл для DLL и найти там истинное имя нужной тебе функции. Map-файл задается в опциях линкера. Ищи подстроку GetInfoPlg и смотри, как она там выглядит. Если есть возможность повторить сборку в 6ке, тоже сделай с map-файлом и посмотри на имя там. Если есть разница, то нужно искать, откуда, если нет, тогда... будем думать дальше... Но вот увидела такую страсть:
Не знаю, что ты этим хотел сказать и кто такой PlugFunc, но если это указатель на функцию, то зачем ее разыменовывать? Напиши просто (только сигнатуру поправь, конечно):
|
| Автор: ИванМ 2.3.2009, 19:37 |
| У меня тоже была похожая проблема. На VS2005 делал dll. VS2005 работала с ним. И ассемблер ее понимал. А VS2008 не понимала. После того как я перекомпилил dll на VS2008 студия стала его понимать. В чем была проблемма я так и не понял. |
| Автор: Dmitriy2k 4.3.2009, 13:26 |
| я сделал тестовый проект на VC2008 (никак не связанный с моей программой), содержащий usemydll.exe и mydll.dll exe-шник подключает dll компилируются без ошибок. ..... сгенерировал MAP-файлы и сверил имена импортируемой и экспортируемой функции... ничего не сходится. В общем после долгих стараний они сошлись. Функция заработала. в прикрепленном ехешнике мой пример. Запускаем в моем примере меню "File->usemydll" запускается функция из dll и выводит MessageBox .... на моем компе оно работает, а на чужом вообще не замускается - пишет дескать приложение некорректно настроено..переустановите. попробую сишные dll-ки скопировать. |
| Автор: Earnest 4.3.2009, 17:48 |
| На счет работы на другом компе - это с твоей проблемой совсем не связано; конечно, нужно с собой dll таскать, MFC и CRT и может, еще какие-то. Посмотри список зависимостей. |
| Автор: Dmitriy2k 5.3.2009, 13:28 |
| В общем я разочарован. VC2008 заточен под VISTA. Ну не хочу чтобы моя программа имела минимальные требования WINDOWS VISTA. Может конечно я что то не понимаю, но программировать я буду на VC6. |
| Автор: Earnest 5.3.2009, 13:50 |
| Лучше тогда на 2003. Вполне себе работает со всеми виндоусами, начиная с 95 (только за совместимостью смотреть надо самому). А серда и сам язык получше, да и библиотеки (MFC \ STL). Чувства насчет ВИСТЫ вполне разделяю. Добавлено через 4 минуты и 39 секунд Но, конечно, библиотеки все равно таскать нужно (это только библиотеки от 6-ки везде понапиханы) |
| Автор: dizzy1984 5.3.2009, 16:13 |
Откуда инфа? |
| Автор: Dmitriy2k 9.3.2009, 15:41 |
| Я к сожалению плохо понимаю программирование под .NET, которая требуется для программ под VC2008, в XP ее нет. В висте, я уверен уже все включено и будет работать на ура. Кучу dll таскать не хочется |
| Автор: Firexel 9.3.2009, 18:23 | ||
Сделай статическую компоновку. Библиотеки будут встроены в экзешник. |
| Автор: just_geek 10.3.2009, 09:06 | ||
Да никакой .NET не требуется для запуска программы написанной на VC++ 2008. Все что необходимо это 3 библиотеи: msvcr90.dll, msvcp90.dll, msvcm90.dll и манифест (Если MFC и ATL не используешь). Если не используешь STL, то уже требуется только одна msvcr90.dll. Ну и Firexel правильно сказал, если изменить опцию /MD на /MT, то эти библиотеки будут линковаться статически. Либо скачать vcredist_x86.exe для VC++ 2008 размером 1.7 мб (по крайней мере в составе Express Edition его нету) и распростронять вместе с программой. Ибо он правильно поставит все библиотеки используя Side-by-side кэш. И еще, не уверен, но возможно, что минимальные требования для программы написанной на vc++ 2008 будет Windows XP. |
| Автор: nerezus 10.3.2009, 13:54 | ||
|