Re: Корректно отработать завершение своего интерфейса
От: Vi2 Удмуртия http://www.adem.ru
Дата: 06.02.10 07:23
Оценка: 2 (1)
Здравствуйте, Аноним, Вы писали:

А>Может быть, не сразу смогу внятно объяснить т.к. тема для меня новая и я в боевом режиме изучаю использование интерфейсов. Проблема в следующем: накатал dll, которая поставляет нужный мне интерфейс. В нем осуществляется вызов обычной VCL-формы. В стороннем приложении вызов моего интерфейса производится по CreateObject("bla-bla"). Затем вызов метода интерфейса приводит к созданию формы (немодальной), осуществляющей некоторые действия, и которая может некоторое время висеть сама по себе. Но проблема в том, что вызывающее приложение может завершиться, пока моя форма присутствует. В этом случае вываливается AV, впрочем, понятно почему. Непонятно, как с этим бороться? т.к. я еще не слишком глубоко постиг механизм всей этой кухни...


А>P.S. Мой интерфейс — наследник от IDispatch, инкапсулируется классом так:
 IControlWindow = interface(IDispatch)
А>    ['{67642A6A-7E5E-41E2-A2E3-ECF9D03503C0}']
А>    procedure ShowControlWindow(iType: Integer; iIndex: Integer); safecall;
А>  end;
А>  IControlWindowDisp = dispinterface
А>    ['{67642A6A-7E5E-41E2-A2E3-ECF9D03503C0}']
А>    procedure ShowControlWindow(iType: Integer; iIndex: Integer); dispid 201;
А>  end;
А> TControlWindow = class(TAutoObject, IControlWindow)
А>  procedure ShowControlWindow(iType: Integer; iIndex: Integer); safecall;
А> end;

А>Что, где проверить\отловить надо, чтобы успеть уничтожить форму в момент завершения вызывающего приложения?

Ответ на твой вопрос заключается в том, какой доступ к форме (немодальной) она позволяет. Если экземпляр доступен по указателю, то определи метод завершения CloseControlWindow и вызывай при закрытии клиента. В VB (судя по коду в другом посте) есть события на закрытие формы — QueryUnload и Unload, в которых можно оповестить этот экземпляр. Если экземпляр не доступен, то его как бы фактически нет, и поэтому то, что он жив, является простым недоразумением.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.