#0
by il
Написал ВК которая открывает делфевскую форму, в которой статически подключается другая dll. все работает, но при закрытии 1С, вторая dll похоже остается висеть в памяти, в процесс эксплорере висит как бы 1С сеанс, его приходится убивать вручную иначе комп не выключается. Еще при выключении компа надо убивать DDE сервер. Кто значет подскажите как при закрытии 1С убивать из памяти вторую длл
#2
by ШтушаКутуша
не все ссылки на компоненту или ее элементы ты корректно уничтожаешь, а по технологии СОМ, пока существует ссылка на интерфейс-объект живет
#4
by 774816
попробуй переменную объекта обнули таким образом после использования а=""; и в самой dll при выгрзуке обнули переменные объектов
#6
by Зарбазан
Внимательно прочитай "Технологию создания ВК" нет не переменные, создавая объекты в ВК нужно корректно счетчиком ссылок управлять, ну и самими ссылками соответственно
#7
by Зарбазан
+ ну и на чем пишешь ВК тоже неплохо было бы сказать...С С++ я бы помог, а если Delphi, то тут много народу...
#10
by Зарбазан
насколько я помню, там писать ничего не надо. В шаблоне с ИТС для VС++ уже лажа, процесс остается в памяти :)
#12
by Зарбазан
да он сам не знает, что у него там... По симптомам похоже, что как раз в своей ВК Release где то не делает....
#13
by kazam
ну вообщем я о том же. " В шаблоне с ИТС для VС++ уже лажа" - эту фигню вообще не видел
#17
by il
Если брать шаблон предложенный Ромиксом, то ниче такого не возникает. Если брать отдельно форму которая вызывается в ВК и вызывает вторую компоненту то тоже все нормально ниче в процессах не остается. Форму вызываю следующим образом: //Собственно основной метод компоненты end; Может ее как-то удалять надо специально?
#27
by il
В принципе был вариант без формы, вторая длл статично вызывалась в модуле, где описаны Свойства и методы ВК, эффект тот же самый
#30
by il
... ... Application.Terminate Наверно так лучше будет а то мне после закрытия формы надо окошки из нее выдергивать
#34
by il
Вобщем схема этого проекта такая: Есть приложение делфи, которое состоит из 2 файлов, форма и модуль в котором подключается dll и определяются функции из этой длл. При запуске в режиме приложения все работает нормально, форму закрываю, память освобождается. Процедура procedure TScForm.FormDestroy(Sender: TObject); Затем я включил данную форму в ВК для 1С. Там тоже все работает, но при закрытии память не освобождается. Метод который вызывает данную форму: .. .. end;//case end; То что сама форма освобождает память при таком подходе я уже убедился на многочисленных опытах. То что содержалось в деструкторе формы я закомментил и перенес в OnClose, что эффекта не дало, че теперь дальше делать у меня даже нет мыслей. В самой ВК никакие переменные, указатели и т. д. на функции и переменные второй ДЛЛ не определены
#35
by il
Кто знает подскажите какими средствами можно узнать какие именно ссылки остаютя висеть? или все руками по очереди комментить?
#39
by ШтушаКутуша
а почему бы TheScForm не поместить в в T_vk_object.meth4 ? var TheScForm :TScForm;
#42
by il
Код формы: uses procedure FormClose(Sender: TObject; var Action: TCloseAction); function OpenFileReader(var hScScanDev : ScScanDeviceHandle) : boolean; function OpenTwainSource(var hScScanDev : ScScanDeviceHandle) : boolean; function ScanToPackage(hScScanDev : ScScanDeviceHandle; out hScImage: ScImageHandle) : boolean; procedure ExportImageToArchive(hScImage: ScImageHandle; ImageName: string; out ImagePath: string); *******************************************************************************} if not OpenFileReader(hScScanDev) then break; end else begin Log('Сканирование по конфигурации "ScanPassportAndDriveLic"'); function TScForm.CreatePack(var hScPackage: ScPackageHandle): boolean; begin Log('Создание нового пакета...'); function TScForm.OpenFileReader(var hScScanDev: ScScanDeviceHandle): boolean; Log('Инициализация устройства сканирования (FileReader)...'); Log(' пользователь должен указать файл с изображением:'); if dlgLoadImage.Execute then function TScForm.OpenTwainSource(var hScScanDev: ScScanDeviceHandle): boolean; var if not ScScannerSelectTWAINSource(hScInstance, Handle) then begin LogWarn(' TWAIN-источник не был указан, либо TWAIN-подсистема не установлена!'); procedure SetupEditField(var Tag: TEditField; Edit: PEdit; Id: string); end; for iField:=0 to cFields-1 do with EditFields[iField] do if pedtSender^.Name=Edit^.Name then with ScFieldValueAttr.rcValue do begin procedure TScForm.FormClose(Sender: TObject; var Action: TCloseAction); begin end.
#43
by MMF
1) учимся пользоваться файлообменниками 2) убираем все из FormClose в FormDestroy 3) TheScForm делаем локальной переменной метода компоненты Application.Run; --- три строки маразма выкидываем 4) Application.Handle := hMainWND (который получили IExtWindowsSupport)
#47
by MMF
hMainWND - хендл окна 1С, локальная переменная модуля объекта переменной. в init ее инициализируешь
#49
by il
PExtWindows я так понял имеет тип Pointer, а pConnection какой тип должен быть? Это пример для какой версии, у меня 7, а мануала по ней нет только по 5. И в хелпе GetAppMainFrame( че то вообще не находит. Пробовал подобрать тип pConnection методом научо тыка, получилось TInterfacedObject, но у нее функция GetInterface(, а константа IID_IExtWndsSupport не определена ругается. Как ее определять?
#52
by il
у меня в коде нигде не встречается InitDone, где он должен быть в файле dpr, или в файле vk_object.pas?
#56
by il
А это актуально для какой версии Delpi? У меня 7. Функцию GetAppMainFrame в нелпе даже не находит и через точку она не вылазиет. iExtWindows какого типа должен быть - Pointer? короче на этой строке компиляция не проходит: iExtWindows.GetAppMainFrame(wnd);
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- toysql21.dll в 7.7, а 8.0 возможности этой dll уже реализованs 1С-никами ?
- 1с 6 бухгалтерия требует файлы: MFCANS32.DLL и Mfcuia32.dll
- выгрузить dll из памяти
- v8. УТ 10.2.6 ScanOPOS.dll. 1С говорит что нету Msvcrt71.dll :(
- Ошибка v7plus.dll & autosalon.dll
- Управление торговлей 10.2 вместе с scanopos.dll, scaner1c.dll и USB сканером
- Чем грозит замена odbcbcp.dll, sqlsrv32.dll, sqlsrv32.dll, в Win7 ?
- v7: Нужны библиотеки seven.dll и DBEng32.dll
- v7: Как посмотреть какие объекты может создавать данная версия 1cpp.dll, formex.dll
- v7: Ошибка доступа к памяти (Приложение по адресу обратилось к памяти.....)
В этой группе 1С
- ТиС 9.2: Анализ продаж без НДС
- ЗиК: в один день принята на работу и ушла в декрет...
- Конвертация 1.0 - не проводятся документы, созданные из параметров
- Дата и время создания (изменения) элемента справочника
- SOS! Опять! Ошибка совместного доступа к файлу
- Выгрузка документов в *.Dbf файл.
- Не сохраняется после в .mht в Explorer после установки винды.
- Поменять программно картинку у Номенклатуры в УТ.
- Зависание 1С при использовании Почты
- Как отобразить форму документа ?
- Прервать процедуру Delphi
- поменяли хаб на свич и пропал интернет
- Конвертация данных и документ ОперацияБух
- Кнопки в 1С 7,7
- v8: Перетаскивание файлов на 1С:Предприятие
- бесплатный аналог onenote
- При печати просмотре отчёта, чтобы шапка выходила на каждой странице
- Удаленный вызов процедур модуля документа.
- оборотно-сальдовая ведомость по 281 счету.
- Как в 8.1 в ОС Linux загрузить ИБ, имея только командную строку и *.dt?