Грабли с внешними интерфейсами.

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

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

Ответить
POMAH
Посетитель
Сообщения: 49
Зарегистрирован: 29 мар 2005, 17:49

Грабли с внешними интерфейсами.

Сообщение POMAH »

Переношу печатные формы из 5.85.02 в 8.10 (5.3.21) Oracle и вот какая незадача... Компилятор спокойно переваривает исходник, подключаю ресурсник и при печати формы из ресурсника Галактика вывешивает транспорант "Возникло необработанное исключение ExObjIfcNoLoad(ExRef) ошибка загрузки объекта из ресурсного файла (iExtClass)" и тоже самое про iExtAttr. При этом, если проигнорировать эту ошибку и продолжить выполнение, то печатная форма замечательно сформируется...
Ничего сверхестественного в исходниках нет, вот собственно виновник торжества (фрагмент)

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

 var ExAttrFun  : iExtAttr;
 var ExClassFun : iExtClass;
 var cAttr      : comp;
 var wTypAttr, wClassCode : word;
 var sRet: string;
 sRet := '';
 if GetVIPInterface( ExClassFun ) {
   wClassCode := ExClassFun.GetClassCode( coKatParty, 'Страна происхождения' );
   sRet := ExClassFun.GetSegName( wClassCode, KatParty.nRec );
   SrcCountry := if(sRet = '', '-'/*Россия*/, sRet);
   FreeVIPInterface( ExClassFun );
 }
 if GetVIPInterface( ExAttrFun ) {
   if ExAttrFun.sGetAttr( coKatParty, vSpSchF.KatParty.nRec, 'ГТД') = 0 {
      sRet := ExAttrFun.ValueExists( coKatParty, cAttr, wTypAttr );
      GTDNumber := if(sRet = '', '-', sRet);
    }
    else GTDNumber := '-';
   FreeVIPInterface( ExAttrFun );
  }
компилирую консольным vip-ом 5.3.21

вот проет(кусок)

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

#setCurEnv "galnet";
#include mcorigincountry.vih
#include extclass.vih
#include extattr.vih
#make "03SchFactACT.frm"
Знатоки, подскажите куда смотреть? Что править?
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

обявить как типы вип интерфейсов и добавить после new.
var ExAttrFun : iExtAttr new;

убрать строки
if GetVIPInterface( )
FreeVIPInterface( )
POMAH
Посетитель
Сообщения: 49
Зарегистрирован: 29 мар 2005, 17:49

Сообщение POMAH »

Алексей писал(а):обявить как типы вип интерфейсов
А можно поподробнее?
PViP
Местный житель
Сообщения: 254
Зарегистрирован: 08 июн 2007, 08:26
Откуда: Красноярск
Контактная информация:

Сообщение PViP »

ваш код будет выглядеть так

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

var ExAttrFun  : iExtAttr new; 
 var ExClassFun : iExtClass new; 
 var cAttr      : comp; 
 var wTypAttr, wClassCode : word; 
 var sRet: string; 
 sRet := ''; 
   wClassCode := ExClassFun.GetClassCode( coKatParty, 'Страна происхождения' ); 
   sRet := ExClassFun.GetSegName( wClassCode, KatParty.nRec ); 
   SrcCountry := if(sRet = '', '-'/*Россия*/, sRet); 
   if ExAttrFun.sGetAttr( coKatParty, vSpSchF.KatParty.nRec, 'ГТД') = 0 { 
      sRet := ExAttrFun.ValueExists( coKatParty, cAttr, wTypAttr ); 
      GTDNumber := if(sRet = '', '-', sRet); 
    } 
    else GTDNumber := '-'; 
Также советую обновить заголовочные extattr.vih и extclass.vih. Они лежат в
...Gal810\FRM\galFrm.rar\CompSrc\C\C_ExtClass\vip\ExtAttr\
...Gal810\FRM\galFrm.rar\CompSrc\C\C_ExtClass\vip\ExtClass\

а если есть архив ...Gal810\FRM\C_ExtClass.rar, то берите из него (этот архив обнавляется вместе с установко обновление, если изменились vih файлы)
...Gal810\FRM\C_ExtClass.rar\CompSrc\C\C_ExtClass\vip\ExtAttr
...Gal810\FRM\C_ExtClass.rar\CompSrc\C\C_ExtClass\vip\ExtClass
POMAH
Посетитель
Сообщения: 49
Зарегистрирован: 29 мар 2005, 17:49

Сообщение POMAH »

PViP писал(а):ваш код будет выглядеть так
...
Ну с этим то все понятно, спасибо, но все равно таже самая история
PViP писал(а): Также советую обновить заголовочные extattr.vih и extclass.vih. Они лежат в
...Gal810\FRM\galFrm.rar\CompSrc\C\C_ExtClass\vip\ExtAttr\
...Gal810\FRM\galFrm.rar\CompSrc\C\C_ExtClass\vip\ExtClass\

а если есть архив ...Gal810\FRM\C_ExtClass.rar, то берите из него (этот архив обнавляется вместе с установко обновление, если изменились vih файлы)
...Gal810\FRM\C_ExtClass.rar\CompSrc\C\C_ExtClass\vip\ExtAttr
...Gal810\FRM\C_ExtClass.rar\CompSrc\C\C_ExtClass\vip\ExtClass
С этим тоже понятно, оттуда и брал, в смысле из архива GALFRM... А вот архива C_ExtClass у меня нет, может я патч какой некорректно поставил?

Я просто не совсем понял смысл фразы которую сказал Алексей
обявить как типы вип интерфейсов
, а у меня то они как объявлены были?
PViP
Местный житель
Сообщения: 254
Зарегистрирован: 08 июн 2007, 08:26
Откуда: Красноярск
Контактная информация:

Сообщение PViP »

думаю он хочет сказать что у вас они объявлены как объектные интерфейы, а не vip.

По поводу архивов : скорее всего в устанавливаемых обновлениях, не были изменены vih файлы.
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

Имеенно. Объявлять можно как объектный фейс и как випфейс.
Если объектный фейс то нью писать не надо и надо вручную загружать его, если випинтерфейс - пишите нью и он сам автоматом загружается и освобождается.

Где то мы уже исследовали это на форуме, и мне про это популярно разъяснили. :smile:
POMAH
Посетитель
Сообщения: 49
Зарегистрирован: 29 мар 2005, 17:49

Сообщение POMAH »

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

Сообщение edward_K »

В вашем проекте мало инклюдов.
В частности нет того, который определяет нужные под вашу версию define (он через galnet.inc цепляется).
попробуйте хотя бы
#define ComponentVersion
добавить во вторую строку.
POMAH
Посетитель
Сообщения: 49
Зарегистрирован: 29 мар 2005, 17:49

Сообщение POMAH »

Спасибо. Все заработало. :shock:
Как говорится - век живи, век RTFM и все равно LMD
hope
Местный житель
Сообщения: 1353
Зарегистрирован: 29 мар 2005, 17:49
Контактная информация:

Сообщение hope »

Аналогичная проблема - при компиляции присоединенной формы накладной на отпуск ТОРГ-12 ошибок не выдает, но при формировании печатной формы ТОРГ-12 выдается ошибка: "Возникло необработанное исключение ExObjIfcNoLoad(ExRef) ошибка загрузки объекта из ресурсного файла (iExtClass)".
Как тут советуют, добавила в проект строку:
#define ComponentVersion
- это помогло.
Может кто-нибудь объяснить смысл этой строки - что именно она дает?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

во всех вихах куча ifdef - если нет нужно define то компиляция идет немножко не того кода. Этот конкретно отвечает за компонентную принадлежность.
Ответить