Главная страница
    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.011 c
7-78688
Vlad2
2002-08-19 06:29
2002.10.24
Права на использование принтера


3-78218
Rom Shell
2002-10-04 11:18
2002.10.24
Переиндексация


7-78682
kss1515
2002-08-18 20:27
2002.10.24
Как мне избечь ошибок при поодключении DLL, содержащей функцию


1-78454
borg
2002-10-12 13:07
2002.10.24
Получить данные из другой программы(НО это не так просто)


4-78704
Grombl
2002-09-10 22:23
2002.10.24
---|Ветка была без названия|---





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский