Форум: "Базы";
Текущий архив: 2002.10.24;
Скачать: [xml.tar.bz2];
ВнизКараул! Помогите с UDF! Найти похожие ветки
← →
Dimedrol (2002-10-01 16:18) [0]Коллеги, ну что-то никак не получается...
Вроде писал раньше, но исходники похерил ;-)
В общем пишу на Kylix и Линухе UDF for Firebird.
Хочу чтобы при СЕЛЕКТе передавать ей 2 поля, и признак пустого
(типа, в нем строчка "None") и если поле НЕ пустое - без признака,
то показывать его, нет - другое. В принципе - простота!
Вот :
library reklamaf1;
uses SysUtils;
const libcmodulename = "libc.so.6";
function malloc(Size: LongWord): Pointer; cdecl; external libcmodulename name "malloc";
function OneEmpty(Val1,Val2,EmptyFlag:PChar): PChar; //тут и CDECL пробовал - не помогает
var v1,v2,emp,sBuf:string;
begin
//default val
sBuf:="default";
v1:=Trim(string(Val1));
v2:=Trim(string(Val1));
emp:=Trim(string(EmptyFlag));
if v2=emp then sBuf:=v1;
if v1=emp then sBuf:=v2;
Result := malloc(length(sBuf));
StrCopy(Result, pchar(sBuf));
end;
exports OneEmpty;
begin
end.
Описываю -
DECLARE EXTERNAL FUNCTION ONEEMPTY
CSTRING (384), //Пробовал и 255 - не помогает !
CSTRING (384),
CSTRING (8)
RETURNS CSTRING (384) FREE_IT
ENTRY_POINT "OneEmpty" MODULE_NAME "libreklamaf1";
Вызываю :
select OneEmpty("None", "wwwwwwwwwwww", "None") from rdb$database;
Так он мне то только 1-е значение возвращал,
то ща вообще "default" вернул...
Что я не так делаю ?
Помогите! ГорЮ !
← →
Desdechado (2002-10-01 17:49) [1]
v2:=Trim(string( Val2));
emp:=Trim(string(EmptyFlag));
if v2=emp then sBuf:=v1;
if v1=emp then sBuf:=v2;
Result := malloc(length(sBuf) +1);
StrCopy(Result, pchar(sBuf));
result[ Length(sBuf) + 1 ] := 0;
а CDECL поставь все равно
← →
Dimedrol (2002-10-01 18:47) [2]Теперь вот что -
function OneEmpty(Val1,Val2,EmptyFlag:PChar): PChar; cdecl;
var v1,v2,emp,sBuf:string;
begin
//default val
sBuf:="default";
v1:=Trim(string(Val1));
v2:=Trim(string(Val2));
emp:=Trim(string(EmptyFlag));
if v2=emp then sBuf:=v1;
if v1=emp then sBuf:=v2;
Result := malloc(length(sBuf)+1);
StrCopy(Result, pchar(sBuf));
result[ Length(sBuf) + 1 ] := #0;
end;
Вызываю -
select OneEmpty("aaaaa", "bbbbbbb", "None") from rdb$database;
Result = "default"
Все верно...
Вызываю -
select OneEmpty("aaaaa", "bbbbbbb", "None") from rdb$database;
Result = "default"
Все верно...
Вызываю -
select OneEmpty("None", "bbbbb", "None") from rdb$database;
Result = "default"
ПОЧЕМУ ?????
Вызываю -
select OneEmpty("aaaaa", "None", "None") from rdb$database;
Result = "default"
ПОЧЕМУ ?????!!!!!!!!!!!!!!!!!!
Вызываю -
select OneEmpty("None", "None", "None") from rdb$database;
Result = "None" !!!!!!!!!!!1
Ничего не понимаю !!!!
8888888-(
← →
Desdechado (2002-10-01 19:28) [3]перестартани FB и подсунь ему новую .SO
а то работает, видимо, старая
← →
Dimedrol (2002-10-01 23:30) [4]У меня - Classic Server. Он висит на "сервисе", то бишь нет
подключений - нет и процессов.
Постоянно в памяти он не сидит.
А на счет SO... Да я ее физически убиваю кадый раз
и переписыываю на ее место новую...
← →
Dimedrol (2002-10-02 09:21) [5]Коллеги, у кого-нить вообще примеры создания подобных
УДФ есть ?
Да еще желательно под Линух...
Поделитесь плиз...
← →
Desdechado (2002-10-02 10:18) [6]возьми FreeUDFLib - там и под win, и под linux есть
см. www.ibase.ru
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.10.24;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c