Вызов процедуры из vih

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
ex3em
Новичок
Сообщения: 25
Зарегистрирован: 28 янв 2010, 12:24

Вызов процедуры из vih

Сообщение ex3em »

Проблема с вызовом процедуры из vih ((((

Нашёл в справке L_Smeta.chm

Код: Выделить всё

ObjInterface L_SMETA::OSmetaServ
Содержит методы для работы со сметами. 

Методы
Procedure SmetaRaschet (cRec : Comp); 
Расчет показателей локальной сметы, отсутствующих в АРПС.
Procedure RaschLZ (acSm : Comp); 
Расчет лимитированных затрат объектной сметы. 
Реализован в объектах
L_SMETA::SmetaServ 

Информация
Версия : Компонент L_SMETA 8.10.16.0
Нашёл файл
SmetaServ.vih
в котором есть описание SmetaRaschet

Код: Выделить всё

#ifdef ComponentVersion
#component "L_Smeta"
#endif

#doc
Содержит методы для работы со сметами.
#end
ObjInterface OSmetaServ;
  #doc
  Расчет показателей локальной сметы, отсутствующих в АРПС.
  #end
  Procedure SmetaRaschet(cRec : comp);
  #doc
  Расчет лимитированных затрат объектной сметы.
  #end
  Procedure RaschLZ(acSm : comp);

end;

VipInterface SmetaServ implements OSmetaServ
#ifdef ATL51
  Licensed (FREE)
#endif
;
У себя в vip пытаюсь вызвать

Код: Выделить всё

var SmetaS     :OSmetaServ;
var smetanrec : comp;
...
smetanrec := SmetaStry.nrec;
...
OSmetaServ(SmetaS).SmetaRaschet(smetanrec);
либо так

Код: Выделить всё

var SmetaS     :OSmetaServ;
var smetanrec : comp;
...
smetanrec := SmetaStry.nrec;
...
SmetaS.SmetaRaschet(smetanrec);
В обоих случаях код компилируется, но при вызове метода вылетает сообщение

Код: Выделить всё

Возникло необработанное исключение
ExObjIfcNoInit (ExRef)
ссылка не была инициализирована

"Да" - Продолжить, "Нет" - Отлаживать в окне отладчика
"Отмена" - Не выдавать больше это сообщение - Да !
Подскажите, что я делаю неправильно (((((
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Сообщение m0p3e »

У себя в vip:

#define ComponentVersion
#include SmetaServ.vih

есть?
ex3em
Новичок
Сообщения: 25
Зарегистрирован: 28 янв 2010, 12:24

Сообщение ex3em »

#include SmetaServ.vih - был прописан

#define ComponentVersion - не был прописан, дописал

однако ситуация не изменилоась :cry:
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Сообщение m0p3e »

А если так?
var SmetaS : SmetaServ;
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

для "O"SmetaServ(obj,i) требуется типа loadinterface - удобно когда есть несколько фейсов с одинаковым набором функций и надо использовать их по очереди, в остальных случаях лучше писать имя фейса, а не его описания - не надо следить за инициализацией и освобождением - все делается в автомате.
ex3em
Новичок
Сообщения: 25
Зарегистрирован: 28 янв 2010, 12:24

Сообщение ex3em »

:grin: Спасибо :cool: :cool: :cool:
Всё заработало

var SmetaS : SmetaServ;

SmetaS.SmetaRaschet(smetanrec);

:cool:
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Сообщение m0p3e »

ex3em
Отлично.
Почему в данном случае SmetaServ, а не OSmetaServ edward_K уже объяснил. :)
Ответить