UDF

M22
Дата: 07.10.2005 17:30:14
Привет всем !!!

Написал UDF привожу кусок. UDF рабочая
=========================
library UseDF_IB;
function ValInt_( Str: PChar ): Integer; cdecl; export;
var
Rab: String;
Rab2: char;
i, Kol: Integer;
begin
Kol := Length( Str );
for i := 0 to Kol - 1 do
begin;
Rab2 := Str[ i ];
if Rab2 <> ' ' then begin
if ( ( '0' <= Rab2 ) and ( Rab2 <= '9' ) ) then begin
Rab := Rab + Rab2;
end else break;
end;
end;
if Length( Rab ) = 0 then
Rab := '0';
Result := StrToInt( Rab );
end;



function RaschKRazr_( Mfo: PChar; Pc: PChar ): PChar; cdecl; export;
var
Rab: String;
Lls: String;
Rab2: Integer;
Suu: Integer;
i: Integer;
RabChr: Char;
begin
Rab := '';
i := ValInt_( Mfo );
^^^^^^^^^^^^^
В этой функции мне надо вызвать функцию предыдущию

при вызове SELECT c этой функцией теряется конект с базой
Как правильно написать вызов функции ValInt_
......................
.......................

end;
exports
ValInt_, RaschKRazr_;
end.


СПАСИБО .............


kdv
Дата: 07.10.2005 17:43:09
а чего бы не посмотреть хоть старую статью
www.ibase.ru/devinfo/udf_ok.htm ?
M22
Дата: 07.10.2005 18:04:21
Вроде читал функций у меня десяток и все работают
Мне надо вызвать из UDF существующую в UDF работающую функцию.
kdv
Дата: 07.10.2005 18:12:47
криво написанные UDF валят сервер не только при своем вызове, но могут и постепенно (например гадить в память сервера).
Потом, я не уверен, написано ли у тебя isMultiThread:=True в инициализации dll. И - вызов функции одной из другой не должен валить сервер, разумеется, если они обе корректно работают. Скорее всего у тебя что-то в декларации udf на сервере.

Если ты читал статью, то в самом конце написано, как можно легко отлаживать udf.
M22
Дата: 08.10.2005 08:15:51
те вызов из UDF существующую в UDF функцию
происходит обычно и декларировать ничего не надо?


Потом, я не уверен, написано ли у тебя isMultiThread:=True

где это должно стоять и где почитать про ЭТО
M22
Дата: 08.10.2005 08:19:26
Валиться сразу и на локальной машине
kdv
Дата: 08.10.2005 13:29:24
почитать и в той статье и в ЛЮБОМ примере на ibase.ru. возьми пример safeudf.
kdv
Дата: 08.10.2005 13:30:02
отладить свою функцию, судя по всему - лень?
Тагир Билалов
Дата: 10.10.2005 12:00:14
не работает скорее всего из-за декларативных объявлений cdecl

попробуй завести прототипы функций без этой объявы и внутри них вызывай их же сколько хочешь

а в экпортируемых функциях тупо вызываешь прототипы

intarface

function UDF_1(...): Integer; cdecl; export;
function UDF_2(...): PChar; cdecl; export;

implementation

function UDF_1_prototype(...): Integer;
begin
  // вся обработка
  Result := ...;
end;

function UDF_2_prototype(...): PChar;
var Int_UDF_1: Integer;
begin
  // вызов прототипа первой функции  
  Int_UDF_1 := UDF_1_prototype(...);
  // дальнейшая обработка
  Result := ...
end;

function UDF_1(...): Integer;
begin
  Result := UDF_1_prototype(...);
end;

function UDF_2(...): Pchar;
begin
  Result := UDF_2_prototype(...);
end;
kdv
Дата: 10.10.2005 12:51:38
еще один теоретик, который не любит смотреть примеры? :-)