Страница 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
Алексей
Имеенно. Объявлять можно как объектный фейс и как випфейс.
Если объектный фейс то нью писать не надо и надо вручную загружать его, если випинтерфейс - пишите нью и он сам автоматом загружается и освобождается.
Где то мы уже исследовали это на форуме, и мне про это популярно разъяснили.
Добавлено: 06 июн 2008, 12:58
POMAH
что то не заводится
Есть еще какие мысли?
Добавлено: 06 июн 2008, 14:18
edward_K
В вашем проекте мало инклюдов.
В частности нет того, который определяет нужные под вашу версию define (он через galnet.inc цепляется).
попробуйте хотя бы
#define ComponentVersion
добавить во вторую строку.
Добавлено: 06 июн 2008, 14:32
POMAH
Спасибо. Все заработало.
Как говорится - век живи, век RTFM и все равно LMD
Добавлено: 07 июл 2008, 16:06
hope
Аналогичная проблема - при компиляции присоединенной формы накладной на отпуск ТОРГ-12 ошибок не выдает, но при формировании печатной формы ТОРГ-12 выдается ошибка: "Возникло необработанное исключение ExObjIfcNoLoad(ExRef) ошибка загрузки объекта из ресурсного файла (iExtClass)".
Как тут советуют, добавила в проект строку:
#define ComponentVersion
- это помогло.
Может кто-нибудь объяснить смысл этой строки - что именно она дает?
Добавлено: 07 июл 2008, 18:31
edward_K
во всех вихах куча ifdef - если нет нужно define то компиляция идет немножко не того кода. Этот конкретно отвечает за компонентную принадлежность.