powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Ошибка в UDF при переходе с FB2.0 на FB2.5
6 сообщений из 6, страница 1 из 1
Ошибка в UDF при переходе с FB2.0 на FB2.5
    #38506475
egrob
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возникла проблема при переходе с FB2.0 на FB 2.5. На предыдущей версии работают многие UDF функции, а на 2.5 - нет. Например, запуске запроса в IBExpert:
select CONVERT_GUID_TO_ID17('{1b4668cf-cf5f-4745-85bf-2fc71a6072e8}') from users
выдается сообщение:
"C:\Program Files\Firebird\Firebird_2_5\bin\fbserver.exe": terminated abnormally (4294967295)
К сожалению, никаких вменяемых сообщений об ошибках нет. Мы вставляли отладочную печать в файл, чтобы посмотреть где возникает ошибка - получается что на return - т.е. уже где-то после выхода из UDF.
Приводим текст описания UDF:

DECLARE EXTERNAL FUNCTION CONVERT_GUID_TO_ID17
CSTRING(38)
RETURNS CSTRING(18) FREE_IT
ENTRY_POINT 'ConvertGUID38To17' MODULE_NAME 'ASFPK_UDF'

и текст самой функции в СРР-файле:

/****************************************************************************
Преобразование строкового гуида (старого и неправильного) в новый гуид 17
****************************************************************************/
extern "C" __declspec(dllexport) UCHAR* ISC_EXPORT ConvertGUID38To17(UCHAR* lpszGuid)
{
// Выделяем память
UCHAR* Uuid = (UCHAR*)ib_util_malloc(18);
ZeroMemory( Uuid, 18 );

// Убираем {
Remove( lpszGuid, '{' );
// Убираем }
Remove( lpszGuid, '}' );
// Убираем -
Remove( lpszGuid, '-' );

int halfBytePosToStrPos[] = {
6,
7,
4,
5,
2,
3,
0,
1,
10,
11,
8,
9,
14,
15,
12,
13,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30,
31
};

// Преобразуем строка -> гуид
for ( int i = 0; i < 16; i++ ){
UCHAR v1 = TextCharToUCHAR( lpszGuid[halfBytePosToStrPos[i*2]] );
UCHAR v2 = TextCharToUCHAR( lpszGuid[halfBytePosToStrPos[i*2+1]] );
v1 <<= 4;
v1 += v2;
Uuid[i] = v1;
}
// Избавимся от нулей
ConvertGUIDTo17(Uuid);

//Uuid[0] = 'c';
//memcpy(Uuid,lpszGuid,17);

return Uuid;
}

А вот текст Функции используемой в предыдущей функции:

/****************************************************************************
Переделывание нормального ГУИДА в 17й
****************************************************************************/
inline void ConvertGUIDTo17( UCHAR* pGuid )
{
// Обработаем ГУИД, так чтобы в нем не осталось нулей
/*
В гуиде 16 чисел (каждое от 0 до 255) разных может быть не более 16-ти,
поэтому, если мы возьмем числа от 0 до 15, то будет справедливо одно из утверждений:
1. Все эти числа используются, тогда заменим нуль на 16
2. Не все эти числа используются - тогда используем одно из неиспользуемых как нуль, если надо
*/
bool usedNumbersFlags[16];
ZeroMemory( &usedNumbersFlags, 16 );

for ( char i = 0; i < 16; i++ ){
if ( pGuid[i] < 16 )
usedNumbersFlags[ pGuid[i] ] = true;
}

if ( usedNumbersFlags[0] == false ){
// Нуль не использовался
pGuid[16] = 0;
}
else {
// Нуль попадался
UCHAR zeroSubstitution = 0;
for ( UCHAR i = 1; i < 16; i++ ){
if ( usedNumbersFlags[i] == false ){
zeroSubstitution = i;
break;
}
}
if ( zeroSubstitution == 0 )
zeroSubstitution = 16;

for ( UCHAR i = 0; i < 16; i++ ){
if ( pGuid[i] == 0 ){
pGuid[i] = zeroSubstitution;
}
}

pGuid[16] = zeroSubstitution;
}
}
...
Рейтинг: 0 / 0
Ошибка в UDF при переходе с FB2.0 на FB2.5
    #38506505
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egrobISC_EXPORT
Убрать!
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибка в UDF при переходе с FB2.0 на FB2.5
    #38506728
egrob
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо получилось. А где можно почитать про вред ISC_EXPORT для FB2.5?
...
Рейтинг: 0 / 0
Ошибка в UDF при переходе с FB2.0 на FB2.5
    #38506771
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egrobА где можно почитать про вред ISC_EXPORT для FB2.5?А где ты вообще нашёл про его пользу ?
...
Рейтинг: 0 / 0
Ошибка в UDF при переходе с FB2.0 на FB2.5
    #38506777
egrob
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Досталось по наследству и работало в 2.0. Можно считать что нигде. Вопрос исчерпан
...
Рейтинг: 0 / 0
Ошибка в UDF при переходе с FB2.0 на FB2.5
    #38506787
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egrobи работало в 2.0
это только так казалось, что работало. Есть масса случаев, когда криво написанная или объявленная udf вроде бы работает, а потом "ломается".
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Ошибка в UDF при переходе с FB2.0 на FB2.5
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]