Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передача Application.Handle из exe Delphi 2007 (не, Возникает AV при присвоении 
:(
    Опции темы
ZBugz
Дата 15.1.2011, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 636
Регистрация: 15.2.2006
Где: Москва

Репутация: 6
Всего: 6



Привет. 
1. Присваиваем Application.Handle в DLL переданного значения Application.Handle exe'шника (dll - delphi 2010 unicode, exe - delphi 2007 Ansi) 2. При открытии формы в DLL возникает AV, при этом форма открываеться и типа все работает, но окно AV опять появляеться
3. Без присваивания Application.Handle ошибок нет.

Предлагать переписать ече на delphi 2010 (при этом ошибки не возникает) не предлагать плиз ;) 


PM MAIL   Вверх
Akella
Дата 15.1.2011, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



сам-то понял, что написал?
PM MAIL   Вверх
ZBugz
Дата 15.1.2011, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 636
Регистрация: 15.2.2006
Где: Москва

Репутация: 6
Всего: 6



smile Ага smile 
Короче смысл в том что есть dll (ansi) компельнутая на 2007 и есть программа на 2010 (unicode), вызываем функцию в dll в качестве параметра Application.Handle от exe, в функции присваиваем переданный Application.Handle от exe, дальше эта функция показывает модальную форму на экране, но при появлении формы получаем AV ли Упривелегет инструктион 
PM MAIL   Вверх
Akella
Дата 15.1.2011, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Цитата(ZBugz @  15.1.2011,  13:37 Найти цитируемый пост)
smile Ага smile 

ну сам и отвечай на свой ребус  smile

Добавлено через 2 минуты и 30 секунд
не знаю, может угадаю.... ты в курсе, что должно быть в качестве первого модуля в USES в dpr???

ну а так... жди телепузовпатов
PM MAIL   Вверх
ZBugz
Дата 15.1.2011, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 636
Регистрация: 15.2.2006
Где: Москва

Репутация: 6
Всего: 6



А если так ? Там где /!!! и происходит ошибка

Присоединённый файл ( Кол-во скачиваний: 10 )
Присоединённый файл  DtReport.pas 0,68 Kb
PM MAIL   Вверх
Akella
Дата 15.1.2011, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Скорее ошибка происходит в DLL
PM MAIL   Вверх
ZBugz
Дата 15.1.2011, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 636
Регистрация: 15.2.2006
Где: Москва

Репутация: 6
Всего: 6



Я, если чесно, так же думаю. Но сотрудник, который пишет, думает что delphi виноват. Используеться репорт билдер. Когда показываеться форма, для формирования отчета, появляеться AV или EПривелегиес. 
Я вообще думаю что это проблема с правами, хотя почему тогда это нормально работает с exe, если его компельнуть в 2007 ?!...

PM MAIL   Вверх
Akella
Дата 15.1.2011, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



В каких случая чаще всего происходит AV? Если программа пытается получить доступ к тому объекту, который ещё не создан, так? 

А вообще, что означает строка и для чего она?
Код
Application.Handle:=AppHandle;


PM MAIL   Вверх
ZBugz
Дата 16.1.2011, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 636
Регистрация: 15.2.2006
Где: Москва

Репутация: 6
Всего: 6



Цитата

В каких случая чаще всего происходит AV? Если программа пытается получить доступ к тому объекту, который ещё не создан, так? 

Как только натыкаеться на 
Код
Application.Handle:=AppHandle;

Если ее не передавать, все замечательно запускаеться, но понятно дело кое что не работает.
Цитата

А вообще, что означает строка и для чего она?

Application.Handle exe передаеться в dll
А для чего, это я в понедельник только скажу.
PM MAIL   Вверх
Akella
Дата 16.1.2011, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Цитата(ZBugz @  16.1.2011,  09:44 Найти цитируемый пост)
Application.Handle exe передаеться в dll

дело в том, что Application.Handle в приложении и в библиотеке один и тот же может быть, в библиотеке нужно вычислять дискриптор по другому

Добавлено через 9 минут и 41 секунду
Цитата(ZBugz @  15.1.2011,  15:22 Найти цитируемый пост)
Присоединённый файл  DtReport.pas 0,68 Kb

этот модуль из программы или из библиотеки?
PM MAIL   Вверх
ZBugz
Дата 16.1.2011, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 636
Регистрация: 15.2.2006
Где: Москва

Репутация: 6
Всего: 6



Цитата

дело в том, что Application.Handle в приложении и в библиотеке один и тот же может быть, в библиотеке нужно вычислять дискриптор по другому

Ну если это так, значит не совместимость в версиях delphi ?
Цитата

этот модуль из программы или из библиотеки?

Из exe 
PM MAIL   Вверх
podkashey
Дата 28.1.2014, 02:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 28.1.2014

Репутация: нет
Всего: нет



Цитата(ZBugz @ 16.1.2011,  13:15)
Цитата

дело в том, что Application.Handle в приложении и в библиотеке один и тот же может быть, в библиотеке нужно вычислять дискриптор по другому

Ну если это так, значит не совместимость в версиях delphi ?
Цитата

этот модуль из программы или из библиотеки?

Из exe

Что получилось в итоге? Избавиться от АВ удалось? А то такая же проблема примерно в том же месте. Точнее, сама строка отрабатывает нормально, а когда ДЛЛ начинает формы создавать идет АВ. Хотя думаю, что это все равно связано с хэндлом.
PM MAIL   Вверх
Poseidon
Дата 29.1.2014, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Цитата(Akella @  15.1.2011,  14:35 Найти цитируемый пост)
ты в курсе, что должно быть в качестве первого модуля в USES в dpr
Так это же для стрингов, а Handle - это HWnd или попросту Integer. Для передачи в параметре Integer нет чего-то, что должно быть в качестве первого модуля в uses.

ZBugz, можно глянуть код dll, в котором вызывается модальная форма и код exe, который вызывает код dll?

Это сообщение отредактировал(а) Poseidon - 29.1.2014, 20:29


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Alexeis
Дата 30.1.2014, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



  Связана проблема, что хэндл главного окна в старших версиях переместился. Я уже не помню точно откуда куда, но вероятно переместился из Application в окно первой формы созданной через CreateForm .
  Если написать псевдокодом, то примерно так нужно, объединять

Код

DllApplication.Handle  := ExeApplication.MainFormHandle;


Подразумевается, что Application.MainFormHandle из экзешника передаем в Dll, а DllApplication.Handle это просто Application.Handle в Dll . По крайней мере в документации написано именно так делать. Но тут важно не забыть, перед выгрузкой Dll вернуть старый хэндл, а то Dll благополучно начнет не своевременно уничтожать главное окно программы.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
ZBugz
Дата 31.1.2014, 06:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 636
Регистрация: 15.2.2006
Где: Москва

Репутация: 6
Всего: 6



Что получилось не знаю, я не для себя спрашивал. Я уже не работаю в той конторе.
DLL был чей то, исходников у программиста не было, знал только на чем он написан и все.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0585 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.