"черточка" в строке, возвращаемой UDF-кой

Запросы, планы, оптимизация запросов, ...

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

Ответить
Evgeny_L
Сообщения: 1
Зарегистрирован: 02 июл 2007, 15:43

"черточка" в строке, возвращаемой UDF-кой

Сообщение Evgeny_L » 02 июл 2007, 16:45

Доброго времени суток.
Иногда (в каком случае, пока не определил) UDF-функция, возвращающая строку, "добавляет" в конец строки-результата какой-то символ (в ДБГрид-е отображается как "черточка"). Подскажите, пожалуйста, в чем может быть причина?
Текст UDF:

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

function Float_To_Str(Value: PDouble; Separator: PChar): PChar; stdcall;
var
  LDecimalSeparator: Char;
begin
  try
    try
      LDecimalSeparator := SysUtils.DecimalSeparator;
      SysUtils.DecimalSeparator := Separator^;
      result := PChar(SysUtils.floattostr(Value^));
    finally
      SysUtils.DecimalSeparator := LDecimalSeparator;
    end;
  except on E: Exception do
      result := PChar(E.Message);
  end;
end;
Объявление:

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

DECLARE EXTERNAL FUNCTION Float_To_Str
  DOUBLE PRECISION,CSTRING(255) RETURNS CSTRING(255)
  ENTRY_POINT 'Float_To_Str'  MODULE_NAME 'TEST.DLL';
Заранее спасибо.

Slavik
Сообщения: 115
Зарегистрирован: 17 янв 2007, 11:52

Re: "черточка" в строке, возвращаемой UDF-кой

Сообщение Slavik » 02 июл 2007, 17:10

Безграмотно написанная UDF вообще (stdcall) и выделение памяти под результат в частности. Читай мануалы и FAQ про это. Всё есть на этом же сайте.

P.S. Не проще ли тоже самое сделать на клиенте в событии OnGetText поля датасета и не морочить себе мозги UDF'ками и всеми "тонкостями", связанными с ними?

stix-s
Заслуженный разработчик
Сообщения: 557
Зарегистрирован: 13 дек 2005, 11:52

Re: "черточка" в строке, возвращаемой UDF-кой

Сообщение stix-s » 03 июл 2007, 05:58

Evgeny_L писал(а): Иногда (в каком случае, пока не определил) UDF-функция, возвращающая строку, "добавляет" в конец строки-результата какой-то символ (в ДБГрид-е отображается как "черточка").
Заранее спасибо.
Сначала читать, потом мучаться, там все прозрачно изложено.
http://ibase.ru/devinfo/udf_ok.htm
http://ibase.ru/devinfo/udf_safe.htm

Ответить