![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
COM-сервер и procedural var [D7]
tesseract © (2006-03-14 17:14:00)Имеется такая тема (Com-сервер).
Объявлен родитель у которого имеется свойство TProcs:array of TCallProc;
TCallProc=procedure (var param:integer) of object;
При загрузке объекта массив соотвественно заполяется процедурами из класса наследника.
И всё ОК - за исключением того, что если попытаться вызвать из присвоенной процедуры какую либо процедуру или получить значение из класса-родителя, то AccessViolation.
Кто нибудь может помочь?
tesseract (2006-03-15 10:03:00) [21]
> так просто такого не бывает. значит где-то есть кривизна.
> Может объект и правда где-то случайно убивается
Вот в том-то и прикол. После того, как функция возвращает результат. То объект работает как ни в чём не бывало!
Возможно (я в Com я не очень силён), проблема в том что поля находяться в адресном простанстве клиента, а моя функция выполянется в пространстве сервера. Тогда возникает следующий вопрос - как эту функцию выполнить в контексте клиента?
AV вообще возникает весело - можно посмотреть как поля в памяти располагаются. Смещение AV всегда одно :-)
clickmaker (2006-03-15 09:49:00) [22]
> при вызове процедуры я теряю поля объекта
так просто такого не бывает. значит где-то есть кривизна. Может объект и правда где-то случайно убивается
tesseract (2006-03-14 22:19:00) [23]
> пример кода с AV?
Да длинноват он. И AV я анализирую сам через try/except.
Как я понял при вызове процедуры я теряю поля объекта (как будто он не создан).
Но таблица методов остаётся нетронутой. Это и вызывает AV - как если бы я вызывал методы несозданного объекта.
Весело - методы теоретически должны входить в "рабочее пространство " объекта ибо там и объявлены.
clickmaker (2006-03-14 17:56:00) [24]
> tesseract © (14.03.06 17:14)
пример кода с AV?