|
|
|
Ошибка в UDF при переходе с FB2.0 на FB2.5
|
|||
|---|---|---|---|
|
#18+
Возникла проблема при переходе с 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; } } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2013, 13:45:49 |
|
||
|
Ошибка в UDF при переходе с FB2.0 на FB2.5
|
|||
|---|---|---|---|
|
#18+
egrobISC_EXPORT Убрать! Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2013, 14:03:24 |
|
||
|
Ошибка в UDF при переходе с FB2.0 на FB2.5
|
|||
|---|---|---|---|
|
#18+
Спасибо получилось. А где можно почитать про вред ISC_EXPORT для FB2.5? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2013, 16:17:07 |
|
||
|
Ошибка в UDF при переходе с FB2.0 на FB2.5
|
|||
|---|---|---|---|
|
#18+
egrobА где можно почитать про вред ISC_EXPORT для FB2.5?А где ты вообще нашёл про его пользу ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2013, 16:32:24 |
|
||
|
Ошибка в UDF при переходе с FB2.0 на FB2.5
|
|||
|---|---|---|---|
|
#18+
Досталось по наследству и работало в 2.0. Можно считать что нигде. Вопрос исчерпан ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2013, 16:36:08 |
|
||
|
|

start [/forum/topic.php?fid=40&fpage=107&tid=1564043]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
61ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 236ms |
| total: | 396ms |

| 0 / 0 |
