powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / строковые UDF под Linux CS FireBird 1.5
4 сообщений из 4, страница 1 из 1
строковые UDF под Linux CS FireBird 1.5
    #32441523
Timujin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Работал под InterBase 6.0, после выхода релиза FireBird1.5 перешел на FB и обнаружился непонятный глюк: перестала работать UDF под Linux (компилил на FreePascal'е)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
function rupper(CString: PChar): PChar;stdcall;export;
begin
  rupper:=replace_it(CString,small_chars,cap_chars);
end;

function replace_it(CString: PChar;scr: PChar;dest: PChar):PChar;
var i,j:integer;
begin
  i:= 0 ;
  while (CString[i]<># 0 ) do begin
    j:= 0 ;
    while (scr[j]<># 0 ) do begin
       if CString[i]=scr[j] then begin
         CString[i]:=dest[j];
         Break;
       end;
       inc(j);
    end;
    inc(i);
  end;
  replace_it:=CString;
end;


small_chars и cap_chars - константы (small_chars:pChar =#113#119#101.......), где указаны соответствующие маленьким заглавные русские буквы.

И теперь при
Код: plaintext
1.
2.
3.
Select NAMTVR,CODTVR
from SPTVR
Where RUpper(SPTVR.NAMTVR) LIKE 'ВАР%' order by NAMTVR

Приложение разрывает связь с сервером. Под Windows та же UDF, скомпиленая в Delphi работает :-((( А мне надо под Linux. Под InterBase 6.0 все работало. Подскажите, кто уже наступал на похожие грабли. Заранее спасибо.
...
Рейтинг: 0 / 0
строковые UDF под Linux CS FireBird 1.5
    #32441571
srf2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
читать тут
http://ibase.ru/devinfo/udf_ok.htm

для начала исправь calling convention
...
Рейтинг: 0 / 0
строковые UDF под Linux CS FireBird 1.5
    #32441623
Timujin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
srf2000
Спасибо!
Код: plaintext
1.
2.
3.
4.
5.
Для того, чтобы параметры передавались в правильном порядке, и 
выполнялись определенные правила входа/выхода из функции, при ее 
объявлении всегда используются следующие ключевые слова: cdecl – 
передача параметров и очистка стека по правилам C; export – для доступа к 
функции извне DLL. 

Взято с той ссылки. Я это читал уже, но давно. Непонятно только, почему с InterBase 6.0 прокатывало stdcall вместо cdecl ...
...
Рейтинг: 0 / 0
строковые UDF под Linux CS FireBird 1.5
    #32441924
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Случайно прокатывало. В Борландовских доках ошибка. Ещё директива export не нужна совершенно.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / строковые UDF под Linux CS FireBird 1.5
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]