Имя: Пароль:
1C
1С v8
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)Поди в деструкторе класса объекта ВК проблема.