Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Access Vialtion ... достал уже, помогите разобраться
|
|||
|---|---|---|---|
|
#18+
Access Vialtion at adress ... достал конкретно. Итак было проблем больше, но устранил частично. Ляпою приложение, достаточно громоздкое. В своей работе использую ADO, Fast Report 2.47 Delphi 7 и MS SQL 2000. Приложение сделал в одном exe файле, отладил, все работало. Не было проблем блин сделал, но нужно. Первым делом разгрузил экзешник отчетами. Вынес все компоненты отчетов в dll и вызываю печать просмотр и дизайн через внешние процедуры. Все вызывалось, все работало, пока не закрывал приложение. Появлялся AV! Сломал голову. На формуе FR нашел только, что якобы нужно делать frGlobals.free при ликвидации. Но блин куда не тыкал не помогло. Решил я енту проблему частично принудительной загрузкой и выгрузкой библиотек. Опосля FreeLibrary(...) выход из программы, был чистым, но если я не вызываю дизайнер отчетов. Просмотр и печать без глюков, а дизайнер фигня. 1. Помогите решить проблему с вызовом дизайнера Fast Report в dll и корректным завершением. Может секрет какой есть. Может кто пример скинет. Проблема другая. На дизайнер пока плюнул, закоментировал. Стал выносить в dll формы справоников и обнаружил такой же AV при завершении. Формы содержат TADOQuery, TDataSet, TTreeView и TDBGridEh. 2. При работе с TDBGridEh или с TTreeView (не важно) в dll при закрытии приложения AV лезет! Если просто заполнить Grid или дерево данными полазить по нему все работает верно, а стоит только передать данные назад в форму вызвавшую справоник, сразу не вылезает гемора, а вот когда приложение закроешь то попрет AV. Handle в Dll передаю. Я передаю указатель в dll на соединение с серваком из главной формы и возвращаю указатель на струкутру данных типа запись из двух полей код и название. Думал указатели дело портят, но вот не указатели вроде, а что-то другое. Может секрет какой есть. Вот пример функции вызова function ShowGroupDoc(AHandle:THandle;pCon:PADOConnection;vSklad:PSklad;vGroup:PGroupDoc):boolean;export; AHandle передаю Application.Handle См далее ... Вот пример структур ------------------------------------------------------------- type PSklad=^TSklad; TSklad=record UID:Variant; Name:string; Like:string; end; PGroupDoc=^TGroupDoc; TGroupDoc=record UID:Variant; Name:string; Like:string; end; TReference=record Ok:boolean; UID:variant; Name:string; end; Вот так обзываю нужную мне внешнюю функцию ------------------------------------------------------------- TShowGroupDoc=function (AHandle:THandle;pCon:PADOConnection;pSklad:PSklad;pGroup:PGroupDoc):boolean; Вот так подгружаю библиотеку ------------------------------------------------------------- procedure TForm1.FormCreate(Sender: TObject); begin //Подгружаем библиотеку со справочниками ReferencesHandle := LoadLibrary('REFERENCES.DLL'); if ReferencesHandle = 0 then MessageBox(Application.Handle,'Ошибка загрузки библиотеки references.dll','О Ш И Б К А',MB_ICONERROR); end; Вот так при уничтожении формы выгружаю ------------------------------------------------------------- procedure TForm1.FormDestroy(Sender: TObject); begin FreeLibrary(ReferencesHandle); end; Вот пример вызова из главной формы -------------------------------------------------------- Function GetGroupDoc:TReference; begin Result.Ok:=false; @ShowGroupDoc := GetProcAddress(ReferencesHandle, 'ShowGroupDoc'); if @ShowGroupDoc<> nil then begin if ShowGroupDoc(Application.Handle,@Form1.c1,@vSklad,@vGroupDoc) then begin //Возвращаем результаты Result.Ok:=true; Result.UID:=vGroupDoc.UID; Result.Name:=vGroupDoc.Name; end end else MessageBox(Application.Handle,'Ошибка вызова процедуры ShowGroupDoc!','О Ш И Б К А',MB_ICONERROR) end; Вот так описана dll функция ---------------------------------------------------------- function ShowGroupDoc(AHandle:THandle;pCon:PADOConnection;vSklad:PSklad;vGroup:PGroupDoc):boolean;export; ... implementation ... function ShowGroupDoc; begin Application.Handle:=AHandle; Result:=false; Form_GroupDoc:=TForm_GroupDoc.create(Application); vUID_Sklad:=vSklad.UID; with Form_GroupDoc do begin // установка подключения q1.Connection:=pCon^; q_update.Connection:=pCon^; end; try if Form_GroupDoc.ShowModal =mrOk then begin vGroup.UID:=vUID_Group; //Возвращаю значение выбранное из TreeView назад по указателю в главную форму. Может здесь гемор!!! vGroup.Name:=vName_Group; Result:=true end; finally Form_GroupDoc.Free end end; Помогите. Заранее благодарен. Алексей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2003, 09:23 |
|
||
|
Access Vialtion ... достал уже, помогите разобраться
|
|||
|---|---|---|---|
|
#18+
Попробуй так (в DLL): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. Имена другие, так как это выдранно из моего проекта, а исправлять влом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2003, 09:38 |
|
||
|
Access Vialtion ... достал уже, помогите разобраться
|
|||
|---|---|---|---|
|
#18+
И сильно ты разгрузил? :) Зачем это нужно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2003, 11:20 |
|
||
|
Access Vialtion ... достал уже, помогите разобраться
|
|||
|---|---|---|---|
|
#18+
Не знаю зачем - но ПОМОГАЕТ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2003, 11:55 |
|
||
|
Access Vialtion ... достал уже, помогите разобраться
|
|||
|---|---|---|---|
|
#18+
2 eNose Да я не тебе :) а aLexx Subb ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2003, 12:35 |
|
||
|
Access Vialtion ... достал уже, помогите разобраться
|
|||
|---|---|---|---|
|
#18+
А когда приложение монстр администрировать и заменять компоненты проще. Когда они не в одном exe файле. Например если модуль отчетов точит прекрасно. Чего его трогать. И его можно использовать в другой проге. Чего тут обсуждать. Сделали бы форточки одним exeшником :) Видно ты не занимался серьезными проектами :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2003, 23:03 |
|
||
|
Access Vialtion ... достал уже, помогите разобраться
|
|||
|---|---|---|---|
|
#18+
2 aLexx Subb: в DLL что-нить помещают (обычно) не для того, что бы не трогать работающее. Чаще всего - общие функции. Бывают, конечно и исключения, но зачем тебе понадобилось выносить отчеты в dll-ки, я не понимаю... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2003, 08:12 |
|
||
|
Access Vialtion ... достал уже, помогите разобраться
|
|||
|---|---|---|---|
|
#18+
Как раз я то и занимаюсь такими проектами. А вот когда ты в конце концов запутаешься во всех своих дополнительных dll и т.п. - чего менял и где, а где и не менял - тогда поймешь, что лучше один файл переписать и отдыхать И где ты отчеты еще собрался использовать? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2003, 12:12 |
|
||
|
Access Vialtion ... достал уже, помогите разобраться
|
|||
|---|---|---|---|
|
#18+
Попробуй Sharemem. Поставить в начале своего проекта и проектов Dll'ок. Если не поможет, попробуй вручную освобождать формы создаваемые в Dll. И ещё есть такая вещь - отладка, получаешь ошибку, жмёшь Ctrl+Shift+S (получение стека вызовов), и видишь при освобождении какой переменной она происходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2003, 15:27 |
|
||
|
Access Vialtion ... достал уже, помогите разобраться
|
|||
|---|---|---|---|
|
#18+
http://www.proglib.ru/online/delphibook/a26.asp что-то по этой теме было здесь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2003, 11:29 |
|
||
|
Access Vialtion ... достал уже, помогите разобраться
|
|||
|---|---|---|---|
|
#18+
Может я что-то не понимаю, но для примера: для передачи даже обычной строки (передача PChar не рассматриваю) надо выделить память в hostApp и передать указатель в dll и там писать по этому указателю, небольше выделенной длины, а автор запросто передает строки, вариатнты и т.д. Я бы еще понял, если бы использовалать Sharemem, но ее нет. Немудрено, что >>Access Vialtion ... достал уже ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2003, 12:08 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=32120958&tid=2118847]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
43ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
68ms |
get tp. blocked users: |
2ms |
| others: | 270ms |
| total: | 430ms |

| 0 / 0 |
