![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как уничтожить OLE-объект ? [D6, Win2k]
Dok_3D © (2002-03-05 12:46:00)Здравствуйте,
хочу создать Ole-объект и поработать с ним
Для этого пишу -
var MyInterface : IMyInterface;
begin
MyInterface:=CreateOleObject("OleServer.ServerName") AS IMyInterface;
MyInterface.CoolAction(maza,faka);
end;
Все работает в лучшем виде, но:
на этапе выполнения мне вдруг захотелось осводить памятьот моего Ole-объекта,
Как мне сделать что-то вроде MyInterface.Free ?
Набережных С. (2002-03-05 16:02:00) [1]Сервер - DLL или EXE? Написан тобой или сторонний? Если EXE, то либо он блокируется в памяти(например, вызывается LockServer), либо у него ошибка в механизме подсчета ссылок. Если DLL, то поробуй CoFreeUnusedLibraries.
drpass (2002-03-05 15:57:00) [2]Нет, все-таки что-то в этом коде не так. Если ты используешь переменную-интерфейс, то попробуй создавать объект прямо через CoCreateInstance, и высвобождать по nil. А если ты пользуешься CreateOleObject, то и указатель на него бери типа Variant, высвобождая по Unassigned. Так, кажется, должно сработать. А, кстати, у твоего объекта нет какого-нибудь метода типа "Quit"?
Romkin (2002-03-05 15:16:00) [3]Значит, неправильно написан сам объект, не освобождается про refcount = 0. МОжно попробовать MyInterface._Release, но это уже чернуха - при MyInterface := nil Delphi сама эту процедуру вызывает, так что вряд ли поможет
Dok_3D (2002-03-05 13:10:00) [4]2Digitman
2Romkin
Хотите верьте, хотите нет...
Не помогает MyInterface := nil , сто процентов не помогает.
Делал уже так..., и еще раз только что попробовал...
Не помогает.
Dok_3D (2002-03-05 12:58:00) [5]2Serg,
а вот ничего подобного :(((
такая штука прокатит только если
var MyInterface : Variant;
А если я так и делаю (то есть использую позднее связывание), то все равно память после моего злосчастного OLE-объекта не освобождается.
Как быть ? Я в тупике.
Digitman (2002-03-05 12:58:00) [6]MyInterface := nil;
Romkin (2002-03-05 12:56:00) [7]MyInterface := nil; //это указатель
А вообще-то перед end Delphi сама все освободит
serg (2002-03-05 12:52:00) [8]MyInterface:=Unassigned;