Страница 1 из 1

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

Добавлено: 09 фев 2010, 19:47
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)
ссылка не была инициализирована

"Да" - Продолжить, "Нет" - Отлаживать в окне отладчика
"Отмена" - Не выдавать больше это сообщение - Да !
Подскажите, что я делаю неправильно (((((

Добавлено: 09 фев 2010, 19:51
m0p3e
У себя в vip:

#define ComponentVersion
#include SmetaServ.vih

есть?

Добавлено: 09 фев 2010, 20:04
ex3em
#include SmetaServ.vih - был прописан

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

однако ситуация не изменилоась :cry:

Добавлено: 09 фев 2010, 20:16
m0p3e
А если так?
var SmetaS : SmetaServ;

Добавлено: 09 фев 2010, 21:19
edward_K
для "O"SmetaServ(obj,i) требуется типа loadinterface - удобно когда есть несколько фейсов с одинаковым набором функций и надо использовать их по очереди, в остальных случаях лучше писать имя фейса, а не его описания - не надо следить за инициализацией и освобождением - все делается в автомате.

Добавлено: 10 фев 2010, 11:25
ex3em
:grin: Спасибо :cool: :cool: :cool:
Всё заработало

var SmetaS : SmetaServ;

SmetaS.SmetaRaschet(smetanrec);

:cool:

Добавлено: 10 фев 2010, 11:29
m0p3e
ex3em
Отлично.
Почему в данном случае SmetaServ, а не OSmetaServ edward_K уже объяснил. :)