Конференция "Начинающим" » как такое может быть? [D6, 2003]
 
  • ВладОшин © (18.01.18 16:31) [0]
    CC: IccControl;

     for i := 0 to ControlCount -1 do
     begin
       C := Controls[i];
       if Supports(Controls[I], IccControl) then
       begin
         CC := Controls[I] as IccControl; // Access violation at address 03B73D9B in module 'lib.ocx'. Read of address 20383257.
  • ВладОшин © (18.01.18 16:36) [1]
    т.е. проверили, тип привелся, но попытка взять - ошибка

    Не всегда так получается, закономерности нет, даже наоборот, очень редко, такое случается.

    Для понимания что это - наследники контролов на форме расширены в смысле интерфейсов
    по сообщениям wm_user происходит определенное действие
    выше код от оконного обработчика

    Ошибки пишутся Эврикой в файл, анализирую его собственно
  • RWolf © (18.01.18 16:59) [2]
    а если получать интерфейс прямо при вызове Supports?
  • Вайрекс (18.01.18 17:00) [3]
    Что такое IccControl? Интерфейс? TGUID IID? Почему не так?:
    if Supports(Controls[I], IccControl, CC) then
  • ВладОшин © (18.01.18 17:17) [4]
    IccControl = interface
     ['{CA684BAA-5006-4F51-B686-5B0BB82CB094}']

    попробую
    Supports(Controls[I], IccControl, CC)
    посмотрим, но не понимаю в чем особо разница..
  • Dimka Maslov © (18.01.18 17:22) [5]
    Почему бы не воспользоваться GetInterface?
  • ВладОшин © (18.01.18 17:30) [6]

    > Почему бы не воспользоваться GetInterface?

    да, готовлю уже и такой вариант, проверю и так тоже

    --
    а вот ситуация такая, что программа используется на одном компьютере, а юзер сидит на другом, подключение RDP
    И может быть так, что соединение рвется.

    Может так быть
    if Supports(Controls[I], IccControl) then
    *ПОРВАЛОСЬ*
    CC := Controls[I] as IccControl;
    вот и AV тебе?
  • ВладОшин © (18.01.18 17:36) [7]
    к тому, что по косвенным признакам оно и рвалось несколько раз за день на нескольких компах, что-то там с железом видимо на циске/хабе, где то там, в общем
  • aka © (18.01.18 21:58) [8]

    > if Supports(Controls[I], IccControl)


    Это эквивалентно: if Controls[I] is IccControl; ?
  • ВладОшин © (18.01.18 22:51) [9]
    не is, а as - да
  • ВладОшин © (18.01.18 22:54) [10]
    а, вы вот про что.. тоже - да )
    т.е. я юзаю именно в таком смысле - работает, вроде
    вот иногда только непонятно взбрыкивает )
  • sniknik © (19.01.18 10:09) [11]
    > попробую
    > Supports(Controls[I], IccControl, CC)
    попробуй Supports(nil/null/emptyparam, IccControl, CC), понятно в общем... может есть что то, что всеми интерфейсами "поддерживается", но ими не является.
  • sniknik © (19.01.18 10:15) [12]
    +
    IID_IUnknown
 
Конференция "Начинающим" » как такое может быть? [D6, 2003]
Есть новые Нет новых   [134427   +35][b:0][p:0]