"Sergiy S. Tkachenko" ...
>
> Привет всем.
>
> Есть интересная ситуация с передачей unicode строки в UDF и получения
> такой же строки обратно. Есть пробная UDF с таким текстом
>
> library wstrudf;
>
> {$R *.res}
>
> uses Windows, SysUtils;
>
> threadvar
>    W: PWideChar;

    На кой тут  threadvar ?

> function TestWideChar(Input: PWideChar): PWideChar; cdecl; export;
> begin
>    W := Input;
>    Result := W;
> end;
>
> exports
>    TestWideChar name 'TestWideChar';
>
> begin
>    System.IsMultiThread := True;
> end.
>
> В базе объявлена как
> DECLARE EXTERNAL FUNCTION TWC
>      VARCHAR(20) CHARACTER SET UNICODE_FSS
> RETURNS VARCHAR(20) CHARACTER SET UNICODE_FSS FREE_IT
> ENTRY_POINT 'TestWideChar' MODULE_NAME 'wstrudf'

    Ты описал пар-ры как VARCHAR а пытаешься работать с ними, как с CSTRING.

    На кой тут FREE_IT ?

    Кто сказал, что UNICODE_FSS и WideChar\WideString - одно и то же ?

> Вся база тоже в UNICODE_FSS.
>
> Запрос
> select TWC('ява') from rdb$database
> вернёт 'ÿâa'
>
> Как решить эту проблему.

    _Эту_ проблему можно решить, указав реальный чарсет твоей строковой
константы

    SELECT TWC(_WIN1251 'ява') FROM RDB$DATABASE

но у тебя тут намного больше проблем

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


Ответить