powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / UDF - передача входного параметра типа BLOB BY DESCRIPTOR
9 сообщений из 9, страница 1 из 1
UDF - передача входного параметра типа BLOB BY DESCRIPTOR
    #39027387
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем.

Поискал по форуму обсуждения данного вопроса - вроде бы, как я понял, передавать BLOB в UDF BY DESCRIPTOR было нельзя. И вроде бы как признанный баг, который исправили в версии 2.0.

Структура описания дескриптора парамера:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
  TDSC = packed record
    dsc_dtype    : byte;
    dsc_scale    : shortint;
    dsc_length   : word;
    dsc_sub_type : smallint;
    dsc_flags    : word;
    dsc_address  : pointer;
  end;
  PDSC = ^TDSC;




Структура описания типа BLOB:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
  TISC_BlobGetSegment = function( BlobHandle : pointer; Buffer : pChar; BufferSize : word; var ResultLength: word ) : integer; cdecl;
  TISC_BlobPutSegment = procedure( BlobHandle : pointer; Buffer : pChar; BufferLength : integer ); cdecl;

  TBlob = packed record
    GetSegment       : TISC_BlobGetSegment;
    BlobHandle       : Pinteger;
    SegmentCount     : longint;
    MaxSegmentLength : longint;
    TotalSize        : longint;
    PutSegment       : TISC_BlobPutSegment;
  end;
  PBlob = ^TBlob;



FB 2.5.3 - попробовал передавать в UDF BLOB BY DESCRIPTOR. Пытаюсь получить доступ к BLOB следующим образом:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
{ Тестовая UDF, возвращающая размер BLOB-а }

{
DECLARE EXTERNAL FUNCTION TEST_BLOB_SIZE
    BLOB BY DESCRIPTOR
RETURNS INTEGER BY VALUE
ENTRY_POINT 'UdfBlobByDescriptor' MODULE_NAME 'MyTest.dll';
}

function UdfBlobByDescriptor( var Param : TDSC ) : integer; cdecl; export;
var
  Blob : PBlob;
begin
   Blob := PBlob( dsc_address );
   Result := Blob^.TotalSize;
end;


В параметре по указателю dsc_address содержится явно не структура описания типа "TBlob".

Правильно ли я понимаю, что все же использовать передачу в UDF параметра типа BLOB BY DESCRIPTOR нельзя?

С уважением, Polesov.
...
Рейтинг: 0 / 0
UDF - передача входного параметра типа BLOB BY DESCRIPTOR
    #39027393
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извиняюсь, в тексте UDF следует читать, как

Код: pascal
1.
 Blob := PBlob( Param.dsc_address );
...
Рейтинг: 0 / 0
UDF - передача входного параметра типа BLOB BY DESCRIPTOR
    #39027403
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PolesovПравильно ли я понимаю, что все же использовать передачу в UDF параметра
типа BLOB BY DESCRIPTOR нельзя?
Можно. Но поле dsc_address содержит адрес не blobcallback, а вовсе blob_id.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
UDF - передача входного параметра типа BLOB BY DESCRIPTOR
    #39027454
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Э-э-э... Я, конечно, дико извиняюсь, но где бы глянуть информацию о доступе к блобу через BLOB_ID. Мне требуется в UDF выяснить, параметр IS NULL или нет. Если не NULL, то получить значение самого BLOB. Через DSC легко проверяется на IS NULL. Можно, конечно, сделать через blobcallback, но в моем случае BY DESCRIPTOR было бы универсальнее.

Погуглил по теме BLOB_ID, но чет ничего толкового не нашел.

С уважением, Polsesov.
...
Рейтинг: 0 / 0
UDF - передача входного параметра типа BLOB BY DESCRIPTOR
    #39027458
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesov,

нет внутри udf доступа к объекту blob_id. он есть только снаружи, в API. В общем, для блобов есть два интерфейса - один из АПИ, другой из ЮДФ. Они не пересекаются и "перепутаны" быть не могут.
...
Рейтинг: 0 / 0
UDF - передача входного параметра типа BLOB BY DESCRIPTOR
    #39027460
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PolesovМне требуется в UDF выяснить, параметр IS NULL или нет.
гм. если блоб = null, никакого блоб-ид быть не может. Отлаживать udf в Дельфи умеешь? Там дел-то на проверку минуты две, не больше.
...
Рейтинг: 0 / 0
UDF - передача входного параметра типа BLOB BY DESCRIPTOR
    #39027461
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesovгде бы глянуть информацию о доступе к блобу через BLOB_ID
В API guide, но изнутри UDF ты его так не получишь.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
UDF - передача входного параметра типа BLOB BY DESCRIPTOR
    #39027467
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvPolesovМне требуется в UDF выяснить, параметр IS NULL или нет.
гм. если блоб = null, никакого блоб-ид быть не может. Отлаживать udf в Дельфи умеешь? Там дел-то на проверку минуты две, не больше.
Там дальше по условию: и если не NULL, то получить его содержимое...
...
Рейтинг: 0 / 0
UDF - передача входного параметра типа BLOB BY DESCRIPTOR
    #39027469
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, на мой взгляд, логичнее было бы при передаче через DSC в dsc_address передавать ссылку на blobcallback, но увы...
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / UDF - передача входного параметра типа BLOB BY DESCRIPTOR
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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