Показать сообщение отдельно
Старый 21.10.2011, 15:30   #4  
leva is offline
leva
Участник
 
52 / 36 (2) +++
Регистрация: 03.08.2005
Цитата:
Сообщение от gl00mie Посмотреть сообщение
К слову, о SysMailer: вроде в SP2 это исправили, но раньше в нем был один баг
Не знаю на каком этапе это появилось, я смотрю в AX2009, но кажется есть там ещё один баг.

Метод new в в SysMailer делает assert в начале, так что его как бы можно вызывать уже не делая это в своем коде. Только они забыли про параметр по-умолчанию.
X++:
void new(COM c = new COM('CDO.Message'))
{
    InteropPermission permission = new InteropPermission(InteropKind::ComInterop);
    ;
    permission.assert();
    //пропущено
}
Тут и происходит ошибка, если вызвать его из своего кода без параметров и предварительного assert-а.
Должно быть что-то вроде:
X++:
void new(COM c = null)
{
    InteropPermission permission = new InteropPermission(InteropKind::ComInterop);
    ;
    permission.assert();

    if (prmIsDefault(c))
        c = new COM('CDO.Message');
    //пропущено
}
За это сообщение автора поблагодарили: coolibin (1).