Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.009 c
1-78337
NewChainik
2002-10-14 13:35
2002.10.24
Как обратиться к переменной, если ее имя задано текстовой строкой


1-78511
Dendra
2002-10-13 15:14
2002.10.24
packed record


1-78384
Дмитрий К.К.
2002-10-13 09:53
2002.10.24
DLL-ка


14-78642
qube
2002-10-03 16:47
2002.10.24
Посоветуйте электрогитару


1-78406
Лана Розанова
2002-10-15 11:21
2002.10.24
HTML





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский