![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
ohos |
|
|||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 13.12.2010 Репутация: нет Всего: нет |
Привет, я пытаюсь динамически прилинковать к своему проекту zlib.dll версии 1.1.3, как это делать прочитал в руководстве на другом форуме, сделал также, но при вызове функции из dll которая зовется Inflate возникает ошибка access violation. Архив со всем проектом приложил (он не большой), ошибка возникает в фунцкии:
но почему она возникает, если проверки при подключении dll не возвращают ошибок, что-то сделано неправильно еще? Это сообщение отредактировал(а) ohos - 4.2.2012, 22:46 Присоединённый файл ( Кол-во скачиваний: 3 ) ![]() |
|||
|
||||
Dem_max |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 4 Всего: 39 |
Как ты думаешь есть разница ???
Вот ты говоришь мол хочу импортировать такую функцию
в zlib.dll экспортируется такую функцию
Чё разницы совсем что ли не видно ????? -------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
||||
|
|||||
ohos |
|
|||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 13.12.2010 Репутация: нет Всего: нет |
я в этом деле новичок, тогда как правильно указать импорт?
|
|||
|
||||
Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 4 Всего: 39 |
делать как указано в zlib.h
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
ohos |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 13.12.2010 Репутация: нет Всего: нет |
нашел в нем
нашел описание ZEXTERN в zconf.h в виде
если я правильно понял, то экспорт идет с указанием слова extern, которое судя по msdn указывает линкеру, что код написан на другом языке http://msdn.microsoft.com/query/dev10.quer...%29&rd=true , если я правильно понял, то при объявлении переменных мне нужно добавить также слово extern в
но так работать тоже не хочет, жалуется на неразрешенный внешний символ, но ошибка появляется только при компиляции, статический анализ её не выдает, не понимаю как правильно указывать импорт в данной ситуации, если можно, то ![]() |
||||||
|
|||||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
не правильно понял. ключевой момент тут в ZEXPORT |
|||
|
||||
ohos |
|
|||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 13.12.2010 Репутация: нет Всего: нет |
Не понимаю что с ним делать
![]()
это открывается если перейти к объявлению ZEXPORT, эту конструкцию я тоже не понимаю, она объявляет сама себя если объявлена? ![]() |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
ohos, нет слов...
ты даже поиском по документу пользоваться не умеешь %)
выполни поиск ZEXPORT |
|||
|
||||
ohos |
|
||||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 13.12.2010 Репутация: нет Всего: нет |
прошу прощения, но объявление ZEXPOR было первым, что я полез искать, откуда был взят указанный вами код zconf.h ? в файле от моего проекта он отличается, в частности я искал по "define ZEXPORT WINAPI" средствами визуал студии 2010 в текущем документе, после открытия zconf.h - и там нету
судя по комменту в коде
он от zlib1.dll более ранних версий, а в теме я указывал, что работаю со старой версией 1.1.3 - именно по ней вы можете подсказать? примерный исходник я прикладывал в архиве со всем проектом (примерный, потому-что у меня нет уверенности в том, что dll которая есть собрана именно из такого исходника, возможно он где-то отличался) Это сообщение отредактировал(а) ohos - 11.2.2012, 17:26 |
||||
|
|||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
из исходников zlib-1.2.6 у тебя возможно версия другая. но факт в том, что ZEXPORT объявлен не так, как в твоем предыдущем посте. ясно. что мешает самому собрать свежую версию? там делов на пять минут. позже смогу глянуть твой архив. |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
пример в аттаче.
при использовании G++ собирать так: >g++ -I. -DZLIB_DLL -DWINDOWS main.cpp -omain для микрософтстудии - не знаю. Присоединённый файл ( Кол-во скачиваний: 7 ) ![]() |
|||
|
||||
ohos |
|
|||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 13.12.2010 Репутация: нет Всего: нет |
||||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
враки. начиная с 0.96 все версии совместимы. |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
ohos, и чего ждешь? в архиве пример с твоей старой злибой ;)
|
|||
|
||||
ohos |
|
||||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 13.12.2010 Репутация: нет Всего: нет |
boostcoder крайне признателен за пример), в вузе как раз с++ начался, некоторые вещи тоже стали более понятными, но у меня все же со студией осталась сейчас одна сложность, в куске кода:
она пишет ошибку "Необработанное исключение в "0x10005cb0" в "AnotherTest.exe": 0xC0000005: Нарушение прав доступа при чтении "0xbf244736".", сама strm объявляется выше в той же функции
strm не видна за пределами функции? но ведь & на сколько я знаю передает адрес (или ссылку) на уже существующие данные, а не создает копию, в чем может быть проблема? Это сообщение отредактировал(а) ohos - 26.2.2012, 00:02 |
||||
|
|||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
покажи весь код 'CAnotherTestDlg::inf(FILE *source, FILE *dest)'
|
|||
|
||||
ohos |
|
|||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 13.12.2010 Репутация: нет Всего: нет |
Это сообщение отредактировал(а) ohos - 26.2.2012, 19:16 |
|||
|
||||
boostcoder |
|
||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
верни обратно потому, что один параметр берет макрос, оборачивающий эту функцию. а макросы не могут экспортироваться. а значит, тебе нужно юзать inflateInit_ так:
|
||||
|
|||||
ohos |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 13.12.2010 Репутация: нет Всего: нет |
макрос - это какой-то определенный тип объекта в С++? как вы узнали, что сама функция именно InflateInit_ , а не inflateInit? (просто судя по справке zlib 1.1.3 функция должна была быть inflateInit - http://koeln.ccc.de/archiv/drt/zlib-manual...sic%20functions ), я попробовал сделать как вы указали, предыдущей ошибки не появилось, но вылезла другая :(
когда запускаю Debug вариант, студия указывает как раз на измененную теперь строку
и ругается вроде более понятной ошибкой (только не для меня...)
а почему в импорте функции InflateInit_ второй параметр const char*? если я ничего не путаю, то char это dctuj 1 символ, а в вызове функции мы передаем ZLIB_VERSION, которая объявлена как строка "1.1.3" Это сообщение отредактировал(а) ohos - 26.2.2012, 20:37 |
||||||
|
|||||||
boostcoder |
|
||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
http://www.opennet.ru/docs/RUS/cpp/cpp-5.html
декларацию глянул)
тот мануал дико древний, и в нем серьезное расхождение с действительностью. const char* - и есть строка. выкладывай компилябельный код. |
||||
|
|||||
ohos |
|
|||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 13.12.2010 Репутация: нет Всего: нет |
||||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
твой код у меня не скомпилится. нет микрософткомпилятора.
заметил, что ты не задефайнил ZLIB_DLL, хотя я об этом писал несколько постов ранее. по идее в этом проблема. только не спрашивай где в микрософтстудии дефайнить макросы. я это не знаю. |
|||
|
||||
ohos |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 13.12.2010 Репутация: нет Всего: нет |
На предыдущей странице нашел
пробовал в свой код вставлять поочередно
но это не помогло, ошибка осталась та же (не стал объявлять ZLIB_DLL, а напрямую использовал то, что в нем указано), но сам ZEXTERN у меня уже был объявлен в zlib.h
Это сообщение отредактировал(а) ohos - 26.2.2012, 21:25 |
||||||
|
|||||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
не все члены структуры занулены. потому и ошибка.
сделай так:
|
|||
|
||||
ohos |
|
|||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 13.12.2010 Репутация: нет Всего: нет |
не помогло... меня немного смущает вот эта часть ошибки в дебаг версии
гугл переводит convention как "соглашение", если я правильно понял, то нужно как-то использовать stdcall (второй вариант не помню) для вызова? |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
не может быть. без зануления strm у меня вываливалась та же ошибка. типа того. попробуй методом тыка. я не помню эти соглашения. очень редко использую их. |
|||
|
||||
Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 4 Всего: 39 |
Что то напутано с соглашениями о вызовах функций. -------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |