Ошибка инициализации объектных переменных

Тема в разделе "Lotus - Программирование", создана пользователем nvyush, 18 июн 2009.

  1. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Здравствуйте все!

    Столкнулся с непонятным глюком. Есть форма, на ней внедренное представление. В QueryOpen представления инициализируется объектная переменная (конкретно очередь сообщений, как описывалось на соседней ветке). После перекомпиляции всех модулей при открытии формы вылетает ошибка, суть которой - объектная переменная = Nothing. Открываю вьюху, добавляю/убираю пробел, сохраняю - все работает. После перекомпиляции всех модулей - опять та же ошибка. Кто знает, где собака зарыта?
     
  2. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.081
    Симпатии:
    300
    без кода - сложно угадывать....
    речь идет об инвьюедите?
     
  3. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Форма с внедренным представлением открывается в диалоге. В представлении определены события
    Sub Queryopen(Source As Notesuiview, Continue As Variant)
    Set MsgQueue = New NotesMessageQueue("QName")
    MsgQueue.AutoClose = False
    End Sub

    Sub Onselect(Source As Notesuiview)
    Dim Msg As String
    If MsgQueue.Messages > 0 Then Msg = MsgQueue.Message 'очистка предыдущего сообщения <<< ругается здесь
    MsgQueue.Message = Source.CaretNoteID
    End Sub

    После перекомпиляции всех модулей выдает ошибку "Variant does not contain an object" в третьей строке OnSelect. Если пересохраняю вью, все работает как часы.

    P.S. Форма работает как @PickList, только дополнительно содержит кнопку добавления новых документов.
     
  4. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.081
    Симпатии:
    300
    я уже упоминал - иногда UI ф-ции Нотуса и АПИ (именно UI) к ним глючат
    и особенной "любовью" пользуются модальные окна
    почему теряется объект я не знаю...
    в кач. совета - создавайте его по- месту (а не на опен), ведь очередь без автоклозе будет жить
     
  5. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Спасибо за совет - перенес все в OnSelect и глюк пропал. Кстати, а LS позволяте перегрузить New - создать второй конструктор, чтоб значение автоклоуза устанавливать сразу в конструкторе?
    (+1).
     
  6. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.081
    Симпатии:
    300
    да - позволяет, но там и класс небольшой, пишите свой
     
  7. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    Да.

    Class A
    Sub new( par1$ )
    End Sub
    End Class

    Class B As A
    Sub new( par2, par3), A(par3)
    End Sub
    End Class
     
  8. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Увы, LS в отличие от С++ перегрузку функций не позволяет - два конструктора создать не удалось :). Оставил свой вариант с инициализацией автоклоуза.
     
  9. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    TIA, разве это не полиморфизм?
    перегрузка, по-идее, это создание двух одноименных процедур с разными параметрами в одной области видимости...
    хотя, я уже не помню как этот термин применяется в контексте ООП, по-идее, так же...

    ---
    хотя, получается, что тут полиморфизм с возможностью перезгрузки... но области видимости разные...
     
  10. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    Akupaka
    Полиморфизм - это концепция, в LS частично реализованная через переопределение (overwrite) методов. А ты это к чему?
     
  11. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    к тому, что в LS нет перегрузки методов, а твой пример отображает наследование и полиморфизм, а не перегрузку, или я не прав...
    а почему частично? нормально, на сколько я понимаю концепцию :blink:
     
  12. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.081
    Симпатии:
    300
    вы хотели доп. конструктор... - я недопонял
    я полагал - хотите расширить исходный
     
  13. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    Для конструкторов нет переопределения. В C++ и J тоже. Т.к. конструкторы базовых классов вызываются безусловно.
    Мой пример показывает, как организовать конструктор наследника в котором и можно было бы проинициализировать AutoClose (или что там надо было). Про "частичность" реализации углубляться не буду - отдельная большая тема. На поверхности, то о чём говоришь - в LS нет перегрузки. Реализация для "скрипта" действительно не плохая, но слабоватая для полноценного индустриального языка.
     
  14. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    в общем-то да, но т.к. фактически возможность дополнить метод остается, то полиморфизм все еще тут :blink:
    согласен, меня сбило с толку расхождение в терминологии и реализации...
    ну, если есть время на объяснение точки зрения, я с удовольствием почитаю, вероятно даже, что поспорю о чем-то ))
     
  15. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    На счет Java не знаю, но С++ позволяет определять для одного класса несколько конструкторов с разными наборами параметров, по крайней мере в CBuilder. Кстати, в моем случае можно было бы обойтись и необязательным параметром, но они тоже не поддерживаются :). Или в 8.5 Лотусе уже есть такое счастье, кто знает?

    Что касается темы поста, опять словил тот же глюк, но уже в другом месте. В форме (немодальной) встроенная вьюха, у нее в queryopen инициализируются глобальные переменные uiview и view. В экшене вьюхи пытаю UIView.CaretNoteID и получаю ошибку: UIView - пустой. Ошибка вылетает как правило после рекомпиляции всех модулей, стоит пересохранить вьюху - все работает нормально. Проблема в том, что таких конструкций несколько, а ошибки иногда начинают лезть и без рекомпиляции.

    Пробовал workspace.currentview, но он возвращает нормальное, а не внедренное представление.
     
  16. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.081
    Симпатии:
    300
    как я уже упоминал UI - глюкав, и никто его не будет лечить...
    все UI объекты - "короткоживущие" (условно), попытка сделать их глобальными и ссылаться на них чревата малевичем

    обычно в эвенты передаются к-л объекты - вот ими и можно оперировать
    для встроенных объектов - всё ещё менее прогнозируемо...
    проистекать это может от того, что "фокус" окна (порой невидимого) уходит с контрола (собсно это и является причиной особого положения модальных окон)
    честно - я не вижу особого смысла глобальной инициализации view и uiview...

    неисключено, что вьюшка (во встроенном положении) инициализир. не один раз и сущ. в виде разных инстансов в памяти
    также возможно - при нек. "инициализациях" не все события (методы) отрабатываются
     
  17. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    nvy
    Это называется "перегрузка" (overload), я писал о "переопределении" (overwrite).
     
Загрузка...
Похожие Темы - Ошибка инициализации объектных
  1. Ruska132
    Ответов:
    1
    Просмотров:
    66
  2. Lamerman
    Ответов:
    0
    Просмотров:
    46
  3. Enima
    Ответов:
    0
    Просмотров:
    58
  4. Baindt
    Ответов:
    1
    Просмотров:
    84
  5. anna
    Ответов:
    2
    Просмотров:
    102

Поделиться этой страницей