![]() |
|
|
![]()
|
|
| Dmitriy2k |
|
||||
![]() шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 6.11.2005 Репутация: нет Всего: нет |
Я перешел с vc++60 на vc++ 2008
мой проект довольно большой, состоит из exe и нескольких dll на vc++60 все компилируется без единой ошибки, да и теперь на vc++2008 компилируется без ошибок, но c работоспособностью dll появились проблемы. dll подгружается,ошибок нет:
А вот функция не подгружается, выдает NULL. в vc60 все работало.
Подскажите, что делать? |
||||
|
|||||
| Earnest |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Проще всего построить map-файл для DLL и найти там истинное имя нужной тебе функции. Map-файл задается в опциях линкера. Ищи подстроку GetInfoPlg и смотри, как она там выглядит. Если есть возможность повторить сборку в 6ке, тоже сделай с map-файлом и посмотри на имя там. Если есть разница, то нужно искать, откуда, если нет, тогда... будем думать дальше...
Но вот увидела такую страсть:
Не знаю, что ты этим хотел сказать и кто такой PlugFunc, но если это указатель на функцию, то зачем ее разыменовывать? Напиши просто (только сигнатуру поправь, конечно):
-------------------- ... |
||||
|
|||||
| Dmitriy2k |
|
|||
![]() шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 6.11.2005 Репутация: нет Всего: нет |
Спасибо за подсказку про MAP-файл. Попробую.
typedef void (PROC)(void); int SetAddr( PROC **PlugProc,HINSTANCE hDll, char *procName) { (FARPROC &)*PlugProc = GetProcAddress(...) if(*PlugProc==NULL) } **PlugProc - двойной указатель, потому что в моей программе подключаются плагины с определенным набором внешних функций. Создается массив структур"плагин",в котором хранятся адреса функций. устанавливаю адреса функций следующим образом: result=SetAddr(&(&PlugIns[numPlug])->GetInfo,PlugIns[numPlug].hPluginDll,"GetInfoPlg"); Заморочено конечно но работает стабильно( по крайней мере в VC6). Не будем углубляться в программу, уже все написано. Я сейчас пишу плагины(DLL) на VC2008,на которые моя программа "плюется", а конкретно, на имена функций. |
|||
|
||||
| ИванМ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1260 Регистрация: 19.6.2006 Где: СПб Репутация: нет Всего: 23 |
У меня тоже была похожая проблема. На VS2005 делал dll. VS2005 работала с ним. И ассемблер ее понимал. А VS2008 не понимала. После того как я перекомпилил dll на VS2008 студия стала его понимать. В чем была проблемма я так и не понял.
|
|||
|
||||
| Dmitriy2k |
|
|||
![]() шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 6.11.2005 Репутация: нет Всего: нет |
я сделал тестовый проект на VC2008 (никак не связанный с моей программой),
содержащий usemydll.exe и mydll.dll exe-шник подключает dll компилируются без ошибок. ..... сгенерировал MAP-файлы и сверил имена импортируемой и экспортируемой функции... ничего не сходится. В общем после долгих стараний они сошлись. Функция заработала. в прикрепленном ехешнике мой пример. Запускаем в моем примере меню "File->usemydll" запускается функция из dll и выводит MessageBox .... на моем компе оно работает, а на чужом вообще не замускается - пишет дескать приложение некорректно настроено..переустановите. попробую сишные dll-ки скопировать. Присоединённый файл ( Кол-во скачиваний: 3 )
usedll.zip 76,99 Kb |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
На счет работы на другом компе - это с твоей проблемой совсем не связано; конечно, нужно с собой dll таскать, MFC и CRT и может, еще какие-то. Посмотри список зависимостей.
-------------------- ... |
|||
|
||||
| Dmitriy2k |
|
|||
![]() шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 6.11.2005 Репутация: нет Всего: нет |
В общем я разочарован. VC2008 заточен под VISTA. Ну не хочу чтобы моя программа имела минимальные требования WINDOWS VISTA. Может конечно я что то не понимаю, но программировать я буду на VC6.
|
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Лучше тогда на 2003. Вполне себе работает со всеми виндоусами, начиная с 95 (только за совместимостью смотреть надо самому). А серда и сам язык получше, да и библиотеки (MFC \ STL).
Чувства насчет ВИСТЫ вполне разделяю. Добавлено через 4 минуты и 39 секунд Но, конечно, библиотеки все равно таскать нужно (это только библиотеки от 6-ки везде понапиханы) -------------------- ... |
|||
|
||||
| dizzy1984 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 675 Регистрация: 15.2.2007 Репутация: 10 Всего: 25 |
||||
|
||||
| Dmitriy2k |
|
|||
![]() шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 6.11.2005 Репутация: нет Всего: нет |
Я к сожалению плохо понимаю программирование под .NET, которая требуется для программ под VC2008, в XP ее нет. В висте, я уверен уже все включено и будет работать на ура.
Кучу dll таскать не хочется |
|||
|
||||
| Firexel |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 21.6.2008 Репутация: нет Всего: нет |
Сделай статическую компоновку. Библиотеки будут встроены в экзешник. |
|||
|
||||
| just_geek |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 309 Регистрация: 13.12.2007 Репутация: нет Всего: 10 |
Да никакой .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 |
|
|||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: нет Всего: 43 |
|
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |