Работа с Blob из UDF Firebird 2.5

2010-10-16 Thread AZDesign

В исходниках Firebird 2.5 есть пример fbudf.cpp
В нем функция преобразования строки в Blob:
FBUDF_API void string2blob(const paramdsc* v, blobcallback* outblob)

Нужна обратная функция преобразования Blod в строку типа:
FBUDF_API void blob2string(const blobcallback* outblob, paramdsc* v)

Помогите с примером.
Все мои попытки упираются в вызов 
  EndOfBlob = inpblob->blob_get_segment(inpblob->blob_handle, text, len,
res_len)
который приводит к краху сервера.

С уважением, Андрей Архангельский.

-- 
View this message in context: 
http://firebird.1100200.n4.nabble.com/Blob-UDF-Firebird-2-5-tp2998810p2998810.html
Sent from the firebird-russian mailing list archive at Nabble.com.


Re: Работа с Blob из UDF Firebird 2.5

2010-10-17 Thread Dmitri Kuzmenko

Hello, AZDesign!

AZDesign wrote:

Все мои попытки упираются в вызов 
  EndOfBlob = inpblob->blob_get_segment(inpblob->blob_handle, text, len,

res_len)
который приводит к краху сервера.


похоже на кривое объявление blob_get_segment.
Посмотри в www.ibase.ru/download/blobsaveload.zip
там хоть для паскаля, но аналогию поймешь.

--
Dmitri Kouzmenko, www.ibase.ru, (495) 953-13-34




Re: Работа с Blob из UDF Firebird 2.5

2010-10-17 Thread Arioch
В письме от Mon, 18 Oct 2010 00:35:25 +0400, Dmitri Kuzmenko  
 сообщал:


Все мои попытки упираются в вызов   EndOfBlob =  
inpblob->blob_get_segment(inpblob->blob_handle, text, len,

res_len)
который приводит к краху сервера.


а кто выделяет и освобождает память под все эти char*  ?

Может у сервера и библиотеки не совпадают heap manager'ы ?

--
Написано в почтовом клиенте браузера Opera: http://www.opera.com/mail/



Re: Работа с Blob из UDF Firebird 2.5

2010-10-17 Thread AZDesign

С нее и начинал.
Но я тоже паскальщик, а требуется в MSVS, так как Delphi пока не дает
64-разрядный код

библиотека blobsaveload опирается на определение Blob данное в fun.cpp
А библиотека fbudf опирается на собственное определение 
typedef struct blobcallback {
short (*blob_get_segment)
(void* hnd, ISC_UCHAR* buffer, ISC_USHORT buf_size, ISC_USHORT*
result_len);
void*   blob_handle;
ISC_LONGblob_number_segments;
ISC_LONGblob_max_segment;
ISC_LONGblob_total_length;
void (*blob_put_segment)
(void* hnd, const ISC_UCHAR* buffer, ISC_USHORT buf_size);
ISC_LONG (*blob_lseek)
(void* hnd, ISC_USHORT mode, ISC_LONG offset);
}  *BLOBCALLBACK;
#endif /* !defined(JRD_VAL_H) */
в ibase.h
В чем принципиальное различие понять не могу.
в любом случае спасибо, будем "колдовать" дальше
-- 
View this message in context: 
http://firebird.1100200.n4.nabble.com/Blob-UDF-Firebird-2-5-tp2998810p2999582.html
Sent from the firebird-russian mailing list archive at Nabble.com.


Re: Работа с Blob из UDF Firebird 2.5

2010-10-17 Thread AZDesign

Прошу прощения, (я в C++ новичок) - где и как?
У меня MS VS2005
-- 
View this message in context: 
http://firebird.1100200.n4.nabble.com/Blob-UDF-Firebird-2-5-tp2998810p2999670.html
Sent from the firebird-russian mailing list archive at Nabble.com.


Re: Работа с Blob из UDF Firebird 2.5

2010-10-17 Thread AZDesign

Задача не строку получить, а понять как из Blob взять содержимое и
"поковыряться" в нем.
Прямая функция string2blob делает очень просто - берет указатель на строку и
пихает его Blob'у, сама никаких буферов (массивов) не создает.

-- 
View this message in context: 
http://firebird.1100200.n4.nabble.com/Blob-UDF-Firebird-2-5-tp2998810p2999672.html
Sent from the firebird-russian mailing list archive at Nabble.com.


Re: Работа с Blob из UDF Firebird 2.5

2010-10-17 Thread AZDesign


Евгений Килин wrote:
> 
>> Все мои попытки упираются в вызов
>>  EndOfBlob = inpblob->blob_get_segment(inpblob->blob_handle, text, len,
>> res_len)
>> который приводит к краху сервера.
> 
> Недавно воевали с похожей фигней. Проблема решилась установкой Struct
> Member 
> Alignment в дефолтное значение. 
> 

Нашел, проверил, стоит default
-- 
View this message in context: 
http://firebird.1100200.n4.nabble.com/Blob-UDF-Firebird-2-5-tp2998810p2999679.html
Sent from the firebird-russian mailing list archive at Nabble.com.


Re: Работа с Blob из UDF Firebird 2.5

2010-10-17 Thread Vlad Khorsun

"AZDesign" ...


В исходниках Firebird 2.5 есть пример fbudf.cpp

...

Помогите с примером.


   Или я тупой, или... :)

   В чём проблемы-то ? Как пробовал ?

--
Хорсун Влад 





Re: Работа с Blob из UDF Firebird 2.5

2010-10-17 Thread AZDesign


Khorsun Vlad wrote:
> 
> "AZDesign" ...
> 
>> В исходниках Firebird 2.5 есть пример fbudf.cpp
> ...
>> Помогите с примером.
> 
> Или я тупой, или... :)
> 
> В чём проблемы-то ? Как пробовал ?
> 
> 

Я в C++ разбираюсь плохо, подскажите, что делаю не так:
FBUDF_API void blob2string(const blobcallback* inpblob, paramdsc* rc)
{
if ((inpblob->blob_handle == 0) || (inpblob->blob_total_length==0))
{
internal::setnull(rc);
return;
}
if (!inpblob || !inpblob->blob_handle)
return;

ISC_SHORT EndOfBlob = 0;
ISC_USHORT* res_len = 0;
const ISC_USHORT buf_siz = inpblob->blob_max_segment;

ISC_UCHAR* pbuff = 0;
pbuff = new ISC_UCHAR[buf_siz+1];
internal::set_any_string_type(rc, buf_siz, pbuff);

EndOfBlob = inpblob->blob_get_segment(inpblob->blob_handle, pbuff, 
buf_siz,
res_len); // эта строка вызывает крах

delete [] pbuff;

return;
}

-- 
View this message in context: 
http://firebird.1100200.n4.nabble.com/Blob-UDF-Firebird-2-5-tp2998810p2999702.html
Sent from the firebird-russian mailing list archive at Nabble.com.


Re: Работа с Blob из UDF Firebird 2.5

2010-10-17 Thread Vlad Khorsun

"AZDesign" ...



Я в C++ разбираюсь плохо, подскажите, что делаю не так:


   Где объявление blobcallback ? Где SQL декларация ?

--
Хорсун Влад 





Re: Работа с Blob из UDF Firebird 2.5

2010-10-17 Thread AZDesign


Khorsun Vlad wrote:
> 
> 
> Где объявление blobcallback ? Где SQL декларация ?
> 
> 
Прошу прощения:
typedef struct blobcallback {
short (*blob_get_segment)
(void* hnd, ISC_UCHAR* buffer, ISC_USHORT buf_size, ISC_USHORT*
result_len);
void*   blob_handle;
ISC_LONGblob_number_segments;
ISC_LONGblob_max_segment;
ISC_LONGblob_total_length;
void (*blob_put_segment)
(void* hnd, const ISC_UCHAR* buffer, ISC_USHORT buf_size);
ISC_LONG (*blob_lseek)
(void* hnd, ISC_USHORT mode, ISC_LONG offset);
}  *BLOBCALLBACK;
#endif /* !defined(JRD_VAL_H) */
Это из файла ibase.h

--FBUDF_API void blob2string(const blobcallback* inpblob, paramdsc* rc)
declare external function blob2string
blob,
varchar(32760) by descriptor
returns parameter 2
entry_point 'blob2string' module_name 'az_blob';

-- 
View this message in context: 
http://firebird.1100200.n4.nabble.com/Blob-UDF-Firebird-2-5-tp2998810p2999722.html
Sent from the firebird-russian mailing list archive at Nabble.com.


Re: Работа с Blob из UDF Firebird 2.5

2010-10-18 Thread Vlad Khorsun

"AZDesign" ...


Я в C++ разбираюсь плохо, подскажите, что делаю не так:
FBUDF_API void blob2string(const blobcallback* inpblob, paramdsc* rc)

...

ISC_USHORT* res_len = 0;


   Нужно

ISC_USHORT res_len = 0;

...

EndOfBlob = inpblob->blob_get_segment(inpblob->blob_handle, pbuff, buf_siz,
res_len); // эта строка вызывает крах



   &res_len);

--
Хорсун Влад 





Re: Работа с Blob из UDF Firebird 2.5

2010-10-18 Thread AZDesign


Khorsun Vlad wrote:
> 
> Нужно
> 
> ISC_USHORT res_len = 0;
> 
> &res_len);
> 
> 

Спасибо, заработало.
-- 
View this message in context: 
http://firebird.1100200.n4.nabble.com/Blob-UDF-Firebird-2-5-tp2998810p2999788.html
Sent from the firebird-russian mailing list archive at Nabble.com.


Re: Работа с Blob из UDF Firebird 2.5

2010-10-18 Thread Arioch
В письме от Mon, 18 Oct 2010 05:35:49 +0400, AZDesign  
 сообщал:



так как Delphi пока не дает
64-разрядный код


а Free Pascal или GNU Pascal ?
Тебе же в UDF не нужны GUI

--
Написано в почтовом клиенте браузера Opera: http://www.opera.com/mail/



Re: Работа с Blob из UDF Firebird 2.5

2010-10-18 Thread AZDesign


Arioch wrote:
> 
> В письме от Mon, 18 Oct 2010 05:35:49 +0400, AZDesign  
> 
> а Free Pascal или GNU Pascal ?
> Тебе же в UDF не нужны GUI
> 
> 

Delphi - рабочий инструмент
MSVS - то, что выбрали разработчики Firebird
Все остальное будет 3-им, 4-им инструментом.
Инструмент это не только язык, но управление проектом, и всякие мелочи,
которые узнаешь на собственных шишках.
Поэтому лучше работать на том, что развивается вместе с Firebird.
А язык потихоньку освоим - не первый.
-- 
View this message in context: 
http://firebird.1100200.n4.nabble.com/Blob-UDF-Firebird-2-5-tp2998810p3001419.html
Sent from the firebird-russian mailing list archive at Nabble.com.