DELPHI + COM +1c 8.3. Не завершается COM. Помогите. #773331


#0 by Bittin
Добрый день. Я на delphi сделал вот такое: -получаю данные из Firebird -подключаюсь по COM к 1с 8.3 -на основании полученных данных из из Firebird в 1с-ке создаю документы Проблема заключается в том что -по окончании формирования документов соединение COM в 1с не завершается,даже после закрытия программы на delphi -после закрытия программы на delphi его процесс остается висеть в памяти, причем сжирая 300 Мб Я так понимаю одно зависит напрямую от другого. Подскажите, как решить проблему. Заранее спасибо! Вот код подключения и отключения .... uses ...., ComObj, ActiveX,V83_TLB var .... var
#2 by H A D G E H O G s
Когда делается Disconnect1c в event log Дельфей видишь upload dll-ок 1Совских ?
#3 by Bittin
Как это посмотреть???)))
#4 by Bittin
Сильно не пинайте)))
#5 by H A D G E H O G s
перед BaseConnect:=Unassigned; выполни refcount должно быть равно 2.
#6 by Bittin
нашел насколько я вижу то нет вот: Thread Start: Thread ID: 1776. Process sk_sync_project.exe (1112) Module Load: basic.dll. No Debug Info. Base Address: $17B00000. Process sk_sync_project.exe (1112) Module Load: edb.dll. No Debug Info. Base Address: $20000000. Process sk_sync_project.exe (1112) Module Load: accnt.dll. No Debug Info. Base Address: $1D200000. Process sk_sync_project.exe (1112) Module Load: calc.dll. No Debug Info. Base Address: $1C800000. Process sk_sync_project.exe (1112) Module Load: bp.dll. No Debug Info. Base Address: $1DF00000. Process sk_sync_project.exe (1112) Module Load: scheme.dll. No Debug Info. Base Address: $14F00000. Process sk_sync_project.exe (1112) Module Load: dcs.dll. No Debug Info. Base Address: $1E900000. Process sk_sync_project.exe (1112) Module Load: mngbase.dll. No Debug Info. Base Address: $21600000. Process sk_sync_project.exe (1112) Module Load: mngsrv.dll. No Debug Info. Base Address: $22700000. Process sk_sync_project.exe (1112) Module Load: addin.dll. No Debug Info. Base Address: $15F00000. Process sk_sync_project.exe (1112) Module Load: odata.dll. No Debug Info. Base Address: $20A00000. Process sk_sync_project.exe (1112) Module Load: addncom.dll. No Debug Info. Base Address: $16000000. Process sk_sync_project.exe (1112) Module Load: addncpp.dll. No Debug Info. Base Address: $16100000. Process sk_sync_project.exe (1112) Module Load: drprov.dll. No Debug Info. Base Address: $6F990000. Process sk_sync_project.exe (1112) Module Load: WINSTA.dll. No Debug Info. Base Address: $74480000. Process sk_sync_project.exe (1112) Module Load: NTLANMAN.dll. No Debug Info. Base Address: $6F890000. Process sk_sync_project.exe (1112) Module Load: davclnt.dll. No Debug Info. Base Address: $6BF20000. Process sk_sync_project.exe (1112) Module Load: DAVHLPR.dll. No Debug Info. Base Address: $6BF10000. Process sk_sync_project.exe (1112) Module Load: netutils.dll. No Debug Info. Base Address: $72A10000. Process sk_sync_project.exe (1112) Thread Start: Thread ID: 2064. Process sk_sync_project.exe (1112) Thread Start: Thread ID: 8692. Process sk_sync_project.exe (1112) Source Breakpoint at $0047D7AF: D:appsk_sync_u.pas line 121. Process sk_sync_project.exe (1112)
#7 by Bittin
да, refcount= 2.
#8 by H A D G E H O G s
Это лог подключения. Нужен лог, который Дельфи пишет при отключении от 1С, типа:
#9 by H A D G E H O G s
Скинь проект на liveups@yandex.ru, посмотрю.
#10 by Bittin
я поставил точку останова на Com_Object := NIL; и потом пошел по шагам вот что выдал Source Breakpoint at $00481CD5: D:appsk_sync_u.pas line 123. Process sk_sync_project.exe (8784) Thread Start: Thread ID: 8768. Process sk_sync_project.exe (8784) Thread Start: Thread ID: 8692. Process sk_sync_project.exe (8784) Module Unload: MSVCR80.dll. Process sk_sync_project.exe (8784) Module Unload: fbclient.dll. Process sk_sync_project.exe (8784) Thread Exit: Thread ID: 7244. Process sk_sync_project.exe (8784) Thread Exit: Thread ID: 6068. Process sk_sync_project.exe (8784) Thread Exit: Thread ID: 8768. Process sk_sync_project.exe (8784) Thread Exit: Thread ID: 2892. Process sk_sync_project.exe (8784) Thread Exit: Thread ID: 2984. Process sk_sync_project.exe (8784) Thread Exit: Thread ID: 4340. Process sk_sync_project.exe (8784) Thread Exit: Thread ID: 8692. Process sk_sync_project.exe (8784)
#11 by Bittin
а теперь еще почему-то еще ошибку выдает после выхода: access violation at 0x1035e8d3: read of adress 0x000000000
#12 by Bittin
щас скину
#13 by H A D G E H O G s
Потому что добавил refcount:=idispatch(BaseConnect)._AddRef-1; Это для проверки, надо убрать.
#14 by Bittin
отправил. ок. А что это вообще значит?
#15 by Bittin
а нашел-количество ссылок на мой объект
#16 by Torquader
Объясните, а зачем что-то делать в 1С на Delphi, когда к тому же FireBird прекрасно можно подключаться из 1С ?
#17 by Bittin
препод подкинул как вариант на курсовую, что я теперь и делаю
#18 by Serginio1
Я очень люблю Delphi но уже 6 лет на нем не программирую. По моему лучше изучать C# или Java
#19 by Bittin
времени нет))) что раньше изучал, на том и делаю, вспоминая   былое)))
#20 by b_ru
Для курсовой для препода, который поощряет некрофилию, такие мелочи, как висящий процесс, не существенны обычно :) И уточни, это процесс твоей программы остается висеть с 300 метрами?
#21 by Bittin
не хотелось бы проверять)) да,процесс моей программы остается висеть
#22 by Стальная Крыса
Проблема с ооочень длинной бородой. Сам несколько лет назад натыкался на такую хрень. Вещь системная, непобеждаемая ... уборщик мусора отрабатывает не моментально, а с каким-то интервалом. Т.е. если подождать - процесс отвалится.
#23 by Стальная Крыса
Эээ... Надеюсь, автору понятно про "уборку мусора" в контексте COM
#24 by Serginio1
Это переменные объекта или модуля?
#25 by Bittin
модуля да вы правы отрубается через мин 5-7, но как это ускорить? я пробовал освобождения переменной-типа freеmem не помогает....
#26 by EvgeniuXP
А из 1c сразу к файрбёрду подключиться - религия не позволяет
#27 by Bittin
писал выше!
#28 by Serginio1
CoInitialize(nil); У тебя в потоке вызыается или из формы?
#29 by Bittin
сейчас на форме, по нажатию на кнопку происходит вызов процедуры Connect1c
#30 by Serginio1
Тогда CoInitialize(nil)  не нужен
#31 by Bittin
ок, из за него висит чтоль?
#32 by Serginio1
Если тв вызываешь CoInitialize то при завершении потока должен вызвать CoUninitialize При использовании форм связка CoInitialize CoUninitialize вызывается автоматически
#33 by Кирпич
если делаешь CoInitialize, то надо делать и CoUninitialize Delphi автоматом делает CoInitialize и CoUninitialize, если у тебя не консольное приложение. а вообще, для очистки совести, нужно всем переменным, которые из 1с получал, присвоить Unassigned. Com_Object тоже сделать OleVariant Com_Object := CreateOleObject('V83.ComConnector'); ...
#34 by Bittin
Ок, спасибо, добавлю CoUninitialize. BaseConnect := Unassigned - норм, а вот  Com_Object := Unassigned; вызывает ошибку: incompatible types: Variant and IV8ComConnector
#35 by Bittin
я не могу его сделать OleVariant, тогда вообще не подключается к 1с
#36 by Кирпич
читай
#37 by Bittin
пропустил... Если я сделаю так, то я уже в делфе буду использовать не COM а Ole, так? Мне нужно использовать в делфе com, так требуется...
#38 by Кирпич
просто родключаешься к базе и больше ничего не делаешь? Или ещё там чота колбасишь?
#39 by Bittin
делаю, документы создаю справочники заполняю
#40 by Кирпич
а ну тогда фиг знает чо ты там понаписал. Попробуй сначала чисто подключиться и отключиться.
#41 by Serginio1
Если у тебя не консольное приложение то и CoInitialize тебе не нужны.
#42 by Serginio1
Если Com_Object OleVariant; то
#43 by Bittin
если все переменные сделать Unassigned то процедура Disconnect1c  выполняется 4 минуты, зато после закрытия программы не висит в памяти. Но если оставить как было то процедура Disconnect1c выполняется быстро, зато после закрытия программа висит в процессах теже 4 минуты. Короче равнозначно...что делать что не делать....
#44 by Bittin
если сделать так, то при коннекте вылазиет ошибка "variant does not reference an aitomation object"
#45 by Serginio1
Ты CoInitialize  убрал? А если
#46 by Bittin
убрал. IDispatch-Так заработало. А что это значит и в чем разница?
#47 by Serginio1
Да разницы особо быть не должно.
#48 by Bittin
я так понимаю это интерфейсы так? в чем между ними разница тогда?
#49 by Serginio1
IV8COMConnector это интерфейс с заранее известными методами и свойствами. Idispatch это двойная диспетчеризация. Применяется для позднего связывания.
#50 by Bittin
спасибо за инфу... А если ли способ как нить всем переменным присвоить Unassigned?
#51 by Serginio1
Если они являются переменными метода, то при завершении метода им всем автоматически присваивается Unassigned
#52 by Serginio1
Аналогично как со строками
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С