|
|
|
GraNit |
|
||||
Шустрый Профиль Группа: Участник Сообщений: 55 Регистрация: 20.10.2007 Репутация: нет Всего: нет |
Здравствуйте, уважаеммые господа-коллеги!
Осваиваю динамическую загрузку DLL, а точнее приходится осваивать. Столкнулся с непонятной ситуацией. В проекте есть три функции (в дальнейшем их будет чуть больше), которые вызываются из DLL. Эта библиотека написана MSVS 2010. Первая функция открывает файл, вторая закрывает, третья делает небольшой расчет. Так при вызове третьей функции BCB дает ошибку "Access violation at address ...". Вызов третей функции абсолютно идентичен двум предыдущим. Что-то здесь не так, а что, не пойму. Вот текст приложения на BCB:
Это сообщение отредактировал(а) GraNit - 1.8.2014, 09:42 |
||||
|
|||||
_zorn_ |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 21.8.2007 Репутация: нет Всего: 12 |
А все должны себе представить код BodyPos ? Мне нравится, я вам тут накидал хрен пойми чего. Разберитесь почему у меня ошибка. Access Violation - обращение к неинициализированной памяти. В делфи с KOL, например, выход за пределы массива. Вобщем без листинга BodyPos иди в пень. |
|||
|
||||
GraNit |
|
||||
Шустрый Профиль Группа: Участник Сообщений: 55 Регистрация: 20.10.2007 Репутация: нет Всего: нет |
_zorn_, чтож так грубо то? Мы с вами не друзья-братья. Попрошу вас выдерживать хоть какие-то рамки приличия. Я понимаю, что в стране где блатная романтика считается нормой, ждать культурного отношения к незнакомому человеку не приходится, но на даном форуме существуют правила, которые обязывают относиться к собеседнику с уважением и оскорбления, на сколько я понимаю, наказываются. Я обратился к людям с уважением и ни одной своей фразой не дал повода меня куда-то там посылать.
Теперь к вашей просьбе, уважаемый _zorn_, вот текст вызываемой функции:
По идее все должно работать. Файлы же открываются и закрываются (смотрел ProcessExplorer-ом), только BodyPos не хочет показать передаваемый параметр, вернее вообще не хочет вызываться. |
||||
|
|||||
xvr |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
Криминала не видно. Посмотрите отладчиком со стороны VS где ломается. Для этого в свойствах проекта с вашей DLL на вкладке Configuration Properties -> Debugging в поле ввода Command пропишите *.exe (вместе с путем), полученный в BCB. Далее ставите точку останова в функции BodyPos и запускаете проект с отладкой (F5). Проект конечно надо собрать в Debug режиме.
В принципе вместо *.exe можно прописать и сам BCB, тогда сможете отлаживать сразу и BCB программу и DLL в VS |
|||
|
||||
GraNit |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 55 Регистрация: 20.10.2007 Репутация: нет Всего: нет |
xvr, сделал как вы сказали. Получил выходные данные в окне вывода, но самой отладки (такой к какой я привык) у меня не вышло, т.е. не было трассировки как в BCB. Снова я где-то протормозил, видать
Привожу выходные данные:
Точку останова ставил на MessageBoxA. Мне кажется, что BCB даже в функцию попасть не может. Мож с BCB что-то не так? |
|||
|
||||
xvr |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
||||
|
||||
GraNit |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 55 Регистрация: 20.10.2007 Репутация: нет Всего: нет |
xvr, попробовал перейти на RAD Studio XE
Пришлось немного попотеть с приведением строк в ANSI, там по умолчанию все в Юникоде. Но проблема осталась не решенной, на том же месте, та же ошибка. Значит все таки не в BCB было дело. Странно, функция BodyPos по данным RAD Studio лежит по адресу :53900008, однако вызов идет :004775А7, если я ничего не путаю. Почему так? Значит мы получаем не правильный адрес? А почему GetProcAddress может его получить не правильно? Это сообщение отредактировал(а) GraNit - 8.8.2014, 13:11 |
|||
|
||||
xvr |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
Ну не в нем самом, а в том, что он нагенерил. А RAD Studio XE это все тот же BCB (просто под новым именем)
Похоже это место, откуда вызывали. До BodyPos исполнение просто не дошло. Запустите программу в RAD Studio и посмотрите отладчиком, где она упала. Сорцы у вас точно соответствуют тому, что вы привели в предыдущих постах? А посмотрите, что он вернул (опять же отладчиком) |
|||
|
||||
GraNit |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 55 Регистрация: 20.10.2007 Репутация: нет Всего: нет |
xvr, а он все еще не понимает lib-ы MSVS?
Было бы замечательно просто прикрутить lib файл и работать без dll. |
|||
|
||||
xvr |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
||||
|
||||
GraNit |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 55 Регистрация: 20.10.2007 Репутация: нет Всего: нет |
Блин, нашел ошибку. Сам идиот. Перед вызовом функции я инициализировал массив (из примера я его изъял, посчитал не важным моментом). Так инициализировал 3 элемента, а обращаюсь к 4-му. Вот и всё.
Приношу свои извинения за невнимательность. Уважаемому xvr особая благодарность! P.S. Для информации. RAD Studio XE не понимает lib-ы от MSVS. Попробовал. Это сообщение отредактировал(а) GraNit - 11.8.2014, 10:03 |
|||
|
||||
Правила форума "С++ Builder" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C++ Builder | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |