"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 но у тебя тут намного больше проблем -- Хорсун Влад