Як знищити ole-об’єкт
Як знищити OLE-об'єкт?
Вітаю,
хочу створити Ole-об'єкт і попрацювати з ним
Для цього пишу -
var MyInterface. IMyInterface;
begin
MyInterface: = CreateOleObject ( "OleServer.ServerName") AS IMyInterface;
MyInterface.CoolAction (maza, faka);
end;
Все працює в кращому вигляді, але:
на етапі виконання мені раптом захотілося ТРВОДу пам'ять від мого Ole-об'єкта,
Як мені зробити щось на зразок MyInterface.Free?
MyInterface: = nil; // це покажчик
А взагалі-то перед end Delphi сама все звільнить
2Serg,
а ось нічого подібного: (((
така штука прокотить тільки якщо
var MyInterface. Variant;
А якщо я так і роблю (тобто використовую пізніше зв'язування), то все одно пам'ять після мого злощасного OLE-об'єкта не звільняється.
Як бути. Я в тупіку.
Хочете вірте, хочете ні.
Не допомагає MyInterface: = nil. сто відсотків не допомагає.
Робив вже так. і ще раз тільки що спробував.
Значить, неправильно написаний сам об'єкт, не звільняється про refcount = 0. Можна спробувати MyInterface._Release, але це вже чорнуха - при MyInterface: = nil Delphi сама цю процедуру викликає, так що навряд чи допоможе
Ні, все-таки щось в цьому коді не так. Якщо ти використовуєш змінну-інтерфейс, то спробуй створювати об'єкт прямо через CoCreateInstance, і вивільняти по nil. А якщо ти користуєшся CreateOleObject, то і покажчик на нього бери типу Variant, вивільняючи по Unassigned. Так, здається, має спрацювати. А, до речі, у твого об'єкта немає якогось методу типу "Quit"?
Сервер - DLL або EXE? Написаний тобою або сторонній? Якщо EXE, то або він блокується в пам'яті (наприклад, викликається LockServer), або у нього помилка в механізмі підрахунку посилань. Якщо DLL, то поробуй CoFreeUnusedLibraries.
Пам'ять: 0.72 MB
Час: 0.034 c