Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.10.24;
Скачать: CL | DM;

Вниз

Караул! Помогите с 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.02 c
6-78578
knyaz17
2002-08-21 09:52
2002.10.24
Вопрос по NWLib.


14-78652
Николай Быков
2002-10-04 16:48
2002.10.24
I hate the third companies components


1-78357
Nikoss
2002-10-09 12:30
2002.10.24
Как по ANSII коду узнать символ


1-78402
amo
2002-10-14 16:33
2002.10.24
раскладка клавиатуры


3-78253
Prooksius
2002-10-02 10:25
2002.10.24
Не работает запрос...