![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Караул! Помогите с UDF! [D6, IB6.x]
Dimedrol © (2002-10-01 16:18:00)Коллеги, ну что-то никак не получается...
Вроде писал раньше, но исходники похерил ;-)
В общем пишу на 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-02 10:18:00) [1]возьми FreeUDFLib - там и под win, и под linux есть
см. www.ibase.ru
Dimedrol (2002-10-02 09:21:00) [2]Коллеги, у кого-нить вообще примеры создания подобных
УДФ есть ?
Да еще желательно под Линух...
Поделитесь плиз...
Dimedrol (2002-10-01 23:30:00) [3]У меня - Classic Server. Он висит на "сервисе", то бишь нет
подключений - нет и процессов.
Постоянно в памяти он не сидит.
А на счет SO... Да я ее физически убиваю кадый раз
и переписыываю на ее место новую...
Desdechado (2002-10-01 19:28:00) [4]перестартани FB и подсунь ему новую .SO
а то работает, видимо, старая
Dimedrol (2002-10-01 18:47:00) [5]Теперь вот что -
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 17:49:00) [6]
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 поставь все равно