| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Передача Application.Handle из exe Delphi 2007 (не |
| Автор: ZBugz 15.1.2011, 11:30 |
| Привет. 1. Присваиваем Application.Handle в DLL переданного значения Application.Handle exe'шника (dll - delphi 2010 unicode, exe - delphi 2007 Ansi) 2. При открытии формы в DLL возникает AV, при этом форма открываеться и типа все работает, но окно AV опять появляеться 3. Без присваивания Application.Handle ошибок нет. Предлагать переписать ече на delphi 2010 (при этом ошибки не возникает) не предлагать плиз ;) |
| Автор: Akella 15.1.2011, 11:52 |
| сам-то понял, что написал? |
| Автор: ZBugz 15.1.2011, 13:37 |
Короче смысл в том что есть dll (ansi) компельнутая на 2007 и есть программа на 2010 (unicode), вызываем функцию в dll в качестве параметра Application.Handle от exe, в функции присваиваем переданный Application.Handle от exe, дальше эта функция показывает модальную форму на экране, но при появлении формы получаем AV ли Упривелегет инструктион |
| Автор: Akella 15.1.2011, 14:35 |
ну сам и отвечай на свой ребус Добавлено через 2 минуты и 30 секунд не знаю, может угадаю.... ты в курсе, что должно быть в качестве первого модуля в USES в dpr??? ну а так... жди телепузовпатов |
| Автор: ZBugz 15.1.2011, 15:22 |
| А если так ? Там где /!!! и происходит ошибка |
| Автор: Akella 15.1.2011, 19:06 |
| Скорее ошибка происходит в DLL |
| Автор: ZBugz 15.1.2011, 20:00 |
| Я, если чесно, так же думаю. Но сотрудник, который пишет, думает что delphi виноват. Используеться репорт билдер. Когда показываеться форма, для формирования отчета, появляеться AV или EПривелегиес. Я вообще думаю что это проблема с правами, хотя почему тогда это нормально работает с exe, если его компельнуть в 2007 ?!... |
| Автор: Akella 15.1.2011, 20:44 | ||
| В каких случая чаще всего происходит AV? Если программа пытается получить доступ к тому объекту, который ещё не создан, так? А вообще, что означает строка и для чего она?
|
| Автор: ZBugz 16.1.2011, 09:44 | ||||||
Как только натыкаеться на
Если ее не передавать, все замечательно запускаеться, но понятно дело кое что не работает.
Application.Handle exe передаеться в dll А для чего, это я в понедельник только скажу. |
| Автор: Akella 16.1.2011, 12:53 |
дело в том, что Application.Handle в приложении и в библиотеке один и тот же может быть, в библиотеке нужно вычислять дискриптор по другому Добавлено через 9 минут и 41 секунду этот модуль из программы или из библиотеки? |
| Автор: ZBugz 16.1.2011, 13:15 | ||||
Ну если это так, значит не совместимость в версиях delphi ?
Из exe |
| Автор: podkashey 28.1.2014, 02:47 | ||||||
Что получилось в итоге? Избавиться от АВ удалось? А то такая же проблема примерно в том же месте. Точнее, сама строка отрабатывает нормально, а когда ДЛЛ начинает формы создавать идет АВ. Хотя думаю, что это все равно связано с хэндлом. |
| Автор: Alexeis 30.1.2014, 10:57 | ||
| Связана проблема, что хэндл главного окна в старших версиях переместился. Я уже не помню точно откуда куда, но вероятно переместился из Application в окно первой формы созданной через CreateForm . Если написать псевдокодом, то примерно так нужно, объединять
Подразумевается, что Application.MainFormHandle из экзешника передаем в Dll, а DllApplication.Handle это просто Application.Handle в Dll . По крайней мере в документации написано именно так делать. Но тут важно не забыть, перед выгрузкой Dll вернуть старый хэндл, а то Dll благополучно начнет не своевременно уничтожать главное окно программы. |
| Автор: ZBugz 31.1.2014, 06:14 |
| Что получилось не знаю, я не для себя спрашивал. Я уже не работаю в той конторе. DLL был чей то, исходников у программиста не было, знал только на чем он написан и все. |