Он сохраняет послеждний формран (вернее, ObjectIndent), причем в данном конкретном случае наблюдается состояние, когда формрун не null, но при этом любое обращение к нему ведет к крешу.
Обращение нужно для проверки того, что формран не перестал быть активным. Это проверяется сравнением HWND формрана и верхнего окна. Соответстенно при получении HWND вормрана оно рушилось. Исправление. Стал хранить HWND формрана в отдельной перменной и сравнивать ее:
X++:
if(infolog.setLastActivatedForm())
activeFormRun=infolog.parmLastActivatedForm().object();
if(activeFormRun && activeFormRun.hWnd()==topmost)
{
#log('ObjectIdent')
currentFormRun=new ObjectIdent(activeFormRun);
currentFormRun_hwnd = topmost;
#log('/ObjectIdent')
}
else
{
#log('this.currentFormRun')
fr = this.currentFormRun();
if(fr)
{
// раньше было fr.hwnd != hwnd
if(hwnd!=currentFormRun_hwnd)
{
currentFormRun=null;
currentFormRun_hwnd = 0;
}
#log('/this.currentFormRun().hWnd()')
}
#log('/this.currentFormRun')
}