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

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

Добавлено: 06 июн 2008, 11:36
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"
Знатоки, подскажите куда смотреть? Что править?

Добавлено: 06 июн 2008, 11:38
Алексей
обявить как типы вип интерфейсов и добавить после new.
var ExAttrFun : iExtAttr new;

убрать строки
if GetVIPInterface( )
FreeVIPInterface( )

Добавлено: 06 июн 2008, 11:56
POMAH
Алексей писал(а):обявить как типы вип интерфейсов
А можно поподробнее?

Добавлено: 06 июн 2008, 12:13
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

Добавлено: 06 июн 2008, 12:36
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 у меня нет, может я патч какой некорректно поставил?

Я просто не совсем понял смысл фразы которую сказал Алексей
обявить как типы вип интерфейсов
, а у меня то они как объявлены были?

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

По поводу архивов : скорее всего в устанавливаемых обновлениях, не были изменены vih файлы.

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

Где то мы уже исследовали это на форуме, и мне про это популярно разъяснили. :smile:

Добавлено: 06 июн 2008, 12:58
POMAH
что то не заводится :-( :? Есть еще какие мысли?

Добавлено: 06 июн 2008, 14:18
edward_K
В вашем проекте мало инклюдов.
В частности нет того, который определяет нужные под вашу версию define (он через galnet.inc цепляется).
попробуйте хотя бы
#define ComponentVersion
добавить во вторую строку.

Добавлено: 06 июн 2008, 14:32
POMAH
Спасибо. Все заработало. :shock:
Как говорится - век живи, век RTFM и все равно LMD

Добавлено: 07 июл 2008, 16:06
hope
Аналогичная проблема - при компиляции присоединенной формы накладной на отпуск ТОРГ-12 ошибок не выдает, но при формировании печатной формы ТОРГ-12 выдается ошибка: "Возникло необработанное исключение ExObjIfcNoLoad(ExRef) ошибка загрузки объекта из ресурсного файла (iExtClass)".
Как тут советуют, добавила в проект строку:
#define ComponentVersion
- это помогло.
Может кто-нибудь объяснить смысл этой строки - что именно она дает?

Добавлено: 07 июл 2008, 18:31
edward_K
во всех вихах куча ifdef - если нет нужно define то компиляция идет немножко не того кода. Этот конкретно отвечает за компонентную принадлежность.