-
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.
-
т.е. проверили, тип привелся, но попытка взять - ошибка
Не всегда так получается, закономерности нет, даже наоборот, очень редко, такое случается.
Для понимания что это - наследники контролов на форме расширены в смысле интерфейсов по сообщениям wm_user происходит определенное действие выше код от оконного обработчика
Ошибки пишутся Эврикой в файл, анализирую его собственно
-
а если получать интерфейс прямо при вызове Supports?
-
Что такое IccControl? Интерфейс? TGUID IID? Почему не так?:
if Supports(Controls[I], IccControl, CC) then
-
IccControl = interface ['{CA684BAA-5006-4F51-B686-5B0BB82CB094}']
попробую Supports(Controls[I], IccControl, CC) посмотрим, но не понимаю в чем особо разница..
-
Почему бы не воспользоваться GetInterface?
-
> Почему бы не воспользоваться GetInterface?
да, готовлю уже и такой вариант, проверю и так тоже
-- а вот ситуация такая, что программа используется на одном компьютере, а юзер сидит на другом, подключение RDP И может быть так, что соединение рвется.
Может так быть if Supports(Controls[I], IccControl) then *ПОРВАЛОСЬ* CC := Controls[I] as IccControl; вот и AV тебе?
-
к тому, что по косвенным признакам оно и рвалось несколько раз за день на нескольких компах, что-то там с железом видимо на циске/хабе, где то там, в общем
-
> if Supports(Controls[I], IccControl)
Это эквивалентно: if Controls[I] is IccControl; ?
-
не is, а as - да
-
а, вы вот про что.. тоже - да ) т.е. я юзаю именно в таком смысле - работает, вроде вот иногда только непонятно взбрыкивает )
-
> попробую > Supports(Controls[I], IccControl, CC) попробуй Supports(nil/null/emptyparam, IccControl, CC), понятно в общем... может есть что то, что всеми интерфейсами "поддерживается", но ими не является.
-
+ IID_IUnknown
|