События, связанные с использованием внешних интерфейсов |
Событие cmOnVipLoad вырабатывается в тот момент, когда создается экземпляр Vip-интерфейса. При этом не имеет значения - создается ли индивидуальный, или разделяемый экземпляр.
Событие cmOnVipUnload вырабатывается в момент полного освобождения экземпляра Vip-интерфейса, непосредственно перед выгрузкой его из памяти.
Событие cmOnVipUse вырабатывается в тот момент, когда увеличивается счетчик ссылок на данный экземпляр Vip-интерфейса (в том числе непосредственно после события cmOnVipLoad).
Следует учитывать, что счетчик ссылок увеличивается:
при получении ссылки с помощью функций LoadVipInterface, GetVipInterface, LoadVipRef, GetVipRef;
при присвоении ссылки;
при передаче ссылки как параметра;
при возврате из функции, в которую была передана ссылка как параметр, если это Var-параметр;
при возврате ссылки как значения функции.
Событие cmOnVipFree вырабатывается в момент уменьшения счетчика ссылок на данный экземпляр Vip-интерфейса (в том числе непосредственно перед событием cmOnVipUnload).
Следует учитывать, что счетчик ссылок уменьшается при:
явном освобождении ссылки с помощью функции FreeVipInterface;
выходе переменной типа ссылки (если она была инициализирована) из области существования (например, локальной переменной функции при возврате управления из этой функции, а также для параметра типа ссылки при выходе из функции);
при присвоении ссылки - для старого значения ссылки;
при возврате ссылки как значения функции - для локальной переменной, представляющей в теле функции значение, возвращаемое функцией, и сразу после использования возвращенного значения (для присваивания или для вызова метода).
При присваивании одной переменной типа ссылки значения другой переменной типа ссылки сперва увеличивается счетчик ссылок для присваиваемого значения, а затем уменьшается счетчик для старого, теряемого значения ссылки.
В версии 5.0 события cmOnVipUse и cmOnVipFree не посылаются.