В неё добавлена примитивная функция - "всю строку сделать нижней, первый символ - верхним":
Код: Выделить всё
function Proper(s: String): PChar; cdecl; export;
var
n: Integer;
begin
s := AnsiLowerCase(s);
n := Length(s);
if (n>0) then
s[1] := AnsiUperCase(s[1])[1];
Result := ib_util_malloc(n + 1); // сначала было malloc из msvcrt.dll
StrPCopy(Result, s);
end;
DECLARE EXTERNAL FUNCTION PROPER
CSTRING(255)
RETURNS CSTRING(255) FREE_IT
ENTRY_POINT 'Proper' MODULE_NAME 'udfunx.dll'
При отладке в IB Expert / SQL редактор:
Код: Выделить всё
select PROPER('йЦукен') from RDB$DATABASE;
Но если это же помещаю в простейшую ХП (с FOR вот-это-самое INTO параметр) или триггер -
возвращает или случайный текст, или пустую строку (т.е. видимо в любом случае - какой-то случайный буфер).
Никак не могу найти, что здесь не так.