|
v8: ВК остается в памяти... | ☑ | ||
---|---|---|---|---|
0
vde69
08.03.12
✎
16:03
|
написал на дельфях, вроде работает, внутри использую
FFileStream : TFileStream; описаны 2 процедуры, одна создает поток другая закрывает FFileStream := TFileStream.Create(VarToStr(Params[1]), fmOpenReadWrite + fmShareDenyWrite ); FFileStream.Free; в 1с вызываю обе процедуры, но на файле блокировка остается висеть, и даже после закрытия формы где вызывается ВК эффект тот-же. Блокировка сбрасывается только после закрытия самой 1с... подскажите куда копать |
|||
1
Rie
08.03.12
✎
16:06
|
(0) FFileStream - это поле объекта компоненты?
Где именно вызывается процедура, создающая поток? |
|||
2
orefkov
08.03.12
✎
16:12
|
либо Free не закрывает поток, либо количество вызвов Create не совпадает с количеством вызовов Free.
|
|||
3
vde69
08.03.12
✎
16:16
|
(1) СПАСИБО, правильно говоришь, все заработало
|
|||
4
vde69
08.03.12
✎
16:17
|
дело в том что закрытие а положил в Done а компонента из памяти не выгружается (в отличие от COM объектов)
|
|||
5
Rie
08.03.12
✎
16:21
|
Обрати внимание ещё на один момент - первый объект создастся при загрузке компоненты, до первого явного создания объекта.
|
|||
6
vde69
08.03.12
✎
16:26
|
(5)не понял, как он может создаватся если у меня даже конструктор не описан, я только описываю переменую (то есть делаю типизированый указатель) а сам обьект создаю потом.
Init - в нем нет создания обьекта :) и в конструкторе то-же |
|||
7
Rie
08.03.12
✎
16:30
|
(6) Ну нет - так нет. Я просто на всякий случай - поскольку когда-то сам на это напоролся.
|
|||
8
vde69
12.03.12
✎
11:03
|
-------------------------------------------------------
опять грабли... Процедура ЗакрытьФайл1CD() Если ВК <> Неопределено Тогда ВК.ЗакрытьФайл(); ВК = Неопределено; // тут 1с валится в дамп КонецЕсли; КонецПроцедуры понимаю что траблы в DONE, но в упор не вижу где собака порылась и куда копать в принцепе... type TBin1CD_VK = class(TObject1C,IDispatch,IInitDone,ILanguageExtender) .... .... .... procedure TBin1CD_VK.ControlDone(); begin Clear_1 (); end; Procedure TBin1CD_VK.Clear_1 (); begin // процедура очищает все объеты ВК //if FFileOpen then FFileStream.Free; FFileStream.Free; FFileOpen := false; FCRC := 0; FCountBlockOfFiles := 0; FCountFiles := 0; FTecBlock := 0; SetLength(FArrayFile, 0); end; .... .... .... procedure TObject1C.ControlDone;begin end; function TObject1C.Done: HResult; stdcall; begin ControlDone(); FreeAndNil(FPropList); FreeAndNil(FMethList); hMain := 0; hMDI := 0; If pEvent<>nil Then pEvent._Release(); If pStatus<>nil Then pStatus._Release(); If pErrorLog<>nil Then pErrorLog._Release(); If pExtWindows<>nil Then pExtWindows._Release(); Done := S_OK; end; |
|||
9
Кириллка
12.03.12
✎
11:15
|
(8)Поди в деструкторе класса объекта ВК проблема.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |