Firebird 2.0 RC3 и UDF

Access Violation, некорректное выполнение запросов или вызовов API, ошибки утилит командной строки, в общем все, что вам мешает работать

Модераторы: kdv, dimitr

Ответить
CyberMax
Заслуженный разработчик
Сообщения: 638
Зарегистрирован: 31 янв 2006, 09:05

Firebird 2.0 RC3 и UDF

Сообщение CyberMax » 02 авг 2006, 13:40

Функция (взята для примера из "Мира IB"):

Код: Выделить всё

library my_udf;

uses
  SysUtils;

function malloc(Size: Integer): Pointer; cdecl; external 'msvcrt.dll';

function StrUpperCase(sz1: PChar): PChar; cdecl; export;
var
  S: string;
begin
  S := AnsiUpperCase(sz1);
  Result := malloc(Length(S) + 1);
  StrPCopy(Result, S);
end;

exports
  StrUpperCase;

begin
end.
регистрация:

Код: Выделить всё

DECLARE EXTERNAL FUNCTION FN_UPPER_CASE
    CSTRING(200)
RETURNS CSTRING(200) FREE_IT
ENTRY_POINT 'StrUpperCase' MODULE_NAME 'my_udf'
Запрос:

Код: Выделить всё

SELECT
    FN_UPPER_CASE('qwe')
FROM
    RDB$DATABASE
После шестого запуска сервер всегда слетает. На RC2 то же самое работает без проблем.

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Сообщение hvlad » 02 авг 2006, 15:34

malloc не катит

CyberMax
Заслуженный разработчик
Сообщения: 638
Зарегистрирован: 31 янв 2006, 09:05

Сообщение CyberMax » 02 авг 2006, 15:41

1. Неужели настолько значительные изменения по сравнению с RC2?
2. Почему не катит?
3. Тогда чем память резервировать?

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Сообщение hvlad » 02 авг 2006, 15:57

Код, работающий с УДФ не менялся с момента 2-ой беты.
Вообще-то, есть ib_util.dll
FB2 использует msvcr71.dll, а не msvcrt.dll

CyberMax
Заслуженный разработчик
Сообщения: 638
Зарегистрирован: 31 янв 2006, 09:05

Сообщение CyberMax » 02 авг 2006, 16:17

Ёпт, этот "Мир IB" меня уже в который раз подводит :evil:. При использовании ib_util_malloc все работает корректно.
Кстати, по поводу второго кандидата. Дома стоял еще RC2. На нем malloc отработал без проблем. При установке RC3 воспроизвелась эта ситуация. Сейчас опять вернул RC2, а слет сервера остался. Хотя это уже совсем неважно.

Ответить