Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 06:39 29.09.24 
Компютри и Интернет
   >> Delphi
*Кратък преглед

Страници по тази тема: 1 | 2 | >> (покажи всички)
Тема udf, Delphi, Interbaseнови  
Автор VladoVasilev (минаващ)
Публикувано23.07.05 12:27



Здравейте!
Искам да си напиша едно .dll с няколко ф-ции, които после да използвам като udf-та в interbase. Проблема е с параметрите - входни/изходни, в interbase типа е double precision (double в Delphi), ама в .dll-то като какъв тип да ги обявя - май трябва да ползвам указатели??? Конкретно искам ф-ция която по зададено реално число х да отрязва всичко след к-тата цифра зад запетаята (К и Х са параметри) и да връща резултата....малко help?



Тема Re: udf, Delphi, Interbase [re: VladoVasilev]  
Автор andrew_nikoloff (bugbuster)
Публикувано23.07.05 20:29



Това нещо с типа в DLL-а какъв да бъде не го разбрах... Double си е, нали все пак си го пишеш DLL-а на Делфи?
Ето ти няколко статийки по въпроса, които се надявам, че ще ти свършат добра работа.






Също така има и някои библиотеки, които можеш да ползваш за разработката на UDF-и. Виж и това:

Надявам се "малкото help" да ти е било от полза
Успех с писането!



Тема Май като за мен трябва малко повече help :)нови [re: andrew_nikoloff]  
Автор VladoVasilev (минаващ)
Публикувано25.07.05 13:10



Явно грешката ми е много тъпа, ама...не иска и не иска - затова реших да попитам тук. Ето unit-a, в който ми е засега единствената ф-ция, която не работи :
"unit uDll;

interface
function RoundUp(num : Double; prec : integer) : Double; cdecl; export;
implementation

Function RoundUp(num : Double; prec : integer) : Double;
var i : integer;
begin
for i := 1 to prec do num := 10*num;
if abs(frac(num)) >= 0.5 then
if num < 0 then num := Trunc(num-1)
else num := Trunc(num+1)
else num := Trunc(num);
for i := 1 to prec do num := num/10;
Result := num;
end;

end."

Добавих си я като udf в interbase по следния начин:
////
DECLARE EXTERNAL FUNCTION ROUNDUP
DOUBLE PRECISION,
INTEGER
RETURNS DOUBLE PRECISION BY VALUE
ENTRY_POINT 'RoundUp' MODULE_NAME 'uDll'
///
Когато пусна следната заявка:
"select roundup_1(2.34,1) from articleprice;" ми дава
"Unsuccessful execution caused by a system error that precludes
successful execution of subsequent statements.
Access to UDF library "uDll.DLL" is denied by server administrator."
Четох в google, че това може да е от права, от конфигурационния файл на firebird или някаква друга неизвестна грешка. Някой да знае малко повече по въпроса - да не би ф-цията ми да не е правилно написана???



Тема Ама дай и малко инфонови [re: VladoVasilev]  
Автор andrew_nikoloff (bugbuster)
Публикувано25.07.05 14:25



Интересува ме:
С каква версия на Firebird си? Каква платформа? Каква файлова система? Каква е стойността на UdfAccess в конфигурационния файл? Къде ти се намира DLL-а?



Тема Re: Ама дай и малко инфонови [re: andrew_nikoloff]  
Автор VladoVasilev (минаващ)
Публикувано25.07.05 15:00



A, super - dobre che mi kaza da dam i malko oshte info - poneje imam i INTERBASE SERVER, i FIREBIRD server instalirani, sum kopiral dll-to pri udf-tata na interbase-a, ne na firebird-a....samo che neshto ne smiata kakto triabva, no tova veche sigurno e problem v source-to na samia dll - po-tochno taka kakto sum go napisal vinagi vrushta stoinost 0 - no tova shte go pogledna sega;

Interesno e vse pak, che v firebird.conf imam:
"#UdfAccess = Restrict UDF; d:\work_1\dll;"
i vupreki che v direktoria d:\work_1\dll imam file uDll.dll, pak mi davashe starata greshka....



Тема Ами откоментирай го де :-)нови [re: VladoVasilev]  
Автор andrew_nikoloff (bugbuster)
Публикувано25.07.05 15:02



Махни '#'-то в началото на реда, че той е символа за коментар



Тема Re: Ама дай и малко инфонови [re: VladoVasilev]  
Авторeмил (Нерегистриран)
Публикувано25.07.05 15:55




library uDll;
uses math;
function roundup(var Num: Double; var Prec: Integer): Double; cdecl;export;
var
LFactor: Double;
begin
LFactor := IntPower(10, Prec);
Result := Round(Num / LFactor) * LFactor;
end;
exports roundup;
{DECLARE EXTERNAL FUNCTION ROUNDUP
DOUBLE PRECISION, INTEGER
RETURNS DOUBLE PRECISION BY VALUE
ENTRY_POINT 'roundup' MODULE_NAME 'UDll'}
begin
end.




По мотиви от функцията RoundTo в Делфи 7
(а ти май си с 5 :) а там я няма )


RoundTo(1234567, 3) 1234000
RoundTo(1.234, -2) 1.23
RoundTo(1.235, -2) 1.24




Тема Re: Ама дай и малко инфонови [re: eмил]  
Автор VladoVasilev (минаващ)
Публикувано25.07.05 23:18



Мерси много, оправи се - проблема беше, че параметрите ми не бяха "var" - незнам все още защо, след като ф-цията си връща стойност (Result := .....), но след като ги сложих да са "var" всичко е ок. Странното е че дори когато единия параметър, който НИКЪДЕ НЕ ПРОМЕНЯМ да не е "var", пак не става - firebird-a направо умира :))



Тема Re: Ама дай и малко инфонови [re: VladoVasilev]  
Авторeмил (Нерегистриран)
Публикувано26.07.05 08:11



Из:
"Как научиться писать UDF для IB Database за 21 мин."
http://www.isp.idknet.com/development/interbase/devinfo/udf_ok.htm

"Входные параметры (всегда передаются по ссылке)"
т.е. var :)

И още една много полезна връзка за всеки случай за всякакви
интербейси и огнени птици :)
http://www.ibase.ru



Тема Re: udf, Delphi, Interbaseнови [re: VladoVasilev]  
АвторTTRex (Нерегистриран)
Публикувано27.07.05 20:08



Тъй като гледам, няма нужда нито от dll, нито от udf, ами трябва да се прочете какво прави "CAST"




Страници по тази тема: 1 | 2 | >> (покажи всички)
*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.