Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Corba";
Текущий архив: 2005.07.31;
Скачать: [xml.tar.bz2];

Вниз

"как бы" утечка ...   Найти похожие ветки 

 
GanibalLector ©   (2004-10-20 19:27) [0]

Создаю программно документы(Word).Так вот,хотел поинтересоваться,насколько это правильно ???
GuaV говорит,что это "как бы" утечка.


WordApp := CreateOleObject("Word.Application");
WordApp.Documents.add;
Doc1 := WordApp.ActiveDocument;
... // собственно создаю
Wordapp.visible:=true;

т.е. я не сохраняю,а сразу вывожу(и путь пользователь сам решает что с ним делать)

Вот это :

WordApp.Quit;
WordApp := Unassigned;

я не делаю.

З.Ы. Может все же сохранять в файл и закрывать Word,а потом CreateProcess с созданным файлом ???
З.З.Ы.В принципе,у меня пока проблем нет(XP),а вот пользователи(Win98) говорят,что при закрытии Word-a ИНОГДА сообщение вылетает
(естественно,они не запомнили что за сообщение)


 
GuAV ©   (2004-10-21 00:03) [1]

я говорил, как бы утечка если вот это

> Wordapp.visible:=true;
не выполнится (в следствие исключения) - юзер не увидит ворда. поэтому этой строке место в finally или сделать quit в except.


 
GuAV ©   (2004-10-21 00:12) [2]


> (естественно,они не запомнили что за сообщение)

Сохранить изменения в файле Документ1 ? ;-)


 
YurikGL ©   (2004-10-21 14:48) [3]


> Вот это :
>
> WordApp.Quit;
> WordApp := Unassigned;
> я не делаю.

Вот это WordApp.Quit; не делай а WordApp := Unassigned; делай и все будет ok


 
GuAV ©   (2004-10-21 15:31) [4]

YurikGL ©   (21.10.04 14:48) [3]
а WordApp := Unassigned; делай

Это фактически вызовет _VarClear (из модуля Variants). Так вот, я думал что это должно быть автоматически и очистка вручную - излишне. Так и есть.

procedure TForm1.Button1Click(Sender: TObject);
var W: OleVariant;
begin
 W:=CreateOleObject("Word.Application");
 W.Visible:=True; // breakpoint here
end;


При breakpoint в указанном месте нажать Ctrl+Alt+C.
Давить F8 до call _VarClear.
Нажать F7 и убедиться что вызывается та же подпрограмма что и при WordApp := Unassigned;

Так же можно наблюдать что этот call _VarClear находится в секции finally, хотя она явно не написана.

--------

код в [0] лучше переписать так
WordApp := CreateOleObject("Word.Application");
try
WordApp.Documents.add;
Doc1 := WordApp.ActiveDocument;
... // собственно создаю
Wordapp.visible:=true;
except
Wordapp.Quit;
end;

Если нужно показывать Word даже в случае ошибки, то можно сделать так
WordApp := CreateOleObject("Word.Application");
try
WordApp.Documents.add;
Doc1 := WordApp.ActiveDocument;
... // собственно создаю
finally
Wordapp.visible:=true;
end;


"как бы" утечка имелось ввиду в случае ошибки в "собственно создаю". тогда ворд не будет не завершен не показан.


 
YurikGL ©   (2004-10-21 19:34) [5]


> GuAV ©   (21.10.04 15:31) [4]

Вот честное слово... проблемы не вижу... Всегда делал примерно так:

WordApp := CreateOleObject("Word.Application");
try
WordApp.Documents.add;

Doc1 := WordApp.ActiveDocument; - так никогда не делал. Всегда работал через WordApp.....

... // собственно создаю

Wordapp.visible:=true;
WordApp := Unassigned;
ShowMessage("Документ создан")
except
Wordapp.visible:=true;
WordApp := Unassigned;
ShowMessage("При создании документа произошла ошибка")
end;


 
GuAV ©   (2004-10-21 20:07) [6]

YurikGL ©   (21.10.04 19:34) [5]
Всегда работал через WordApp.....


Мне код с Doc1 был бы понятнее и он был бы немного быстрее (хоть я работал только с XL).

YurikGL ©   (21.10.04 19:34) [5]
Вот честное слово... проблемы не вижу...

В Вашем коде и я не вижу проблемы. Только WordApp := Unassigned; просто лишнее. Это как перед FreeAndNil вставлять ещё один FreeAndNil.

В коде GanibalLector © (код был в http://delphimaster.net/view/10-1097854855/) была проблема - не было try (точнее был try но не там где надо).



Страницы: 1 вся ветка

Форум: "Corba";
Текущий архив: 2005.07.31;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.043 c
3-1118911425
evg00
2005-06-16 12:43
2005.07.31
синтаксис запроса


1-1121233573
Jay1982
2005-07-13 09:46
2005.07.31
WWW


6-1113999635
COOLer
2005-04-20 16:20
2005.07.31
Помогите с поиском сервера


14-1120857704
Ihor Osov'yak
2005-07-09 01:21
2005.07.31
Предложение ударить по разжигателям междунациональной вражды..


14-1120073358
kaif
2005-06-29 23:29
2005.07.31
Любопытная статистика отстоя





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский