Страница 1 из 1

Внешние процедуры

Добавлено: 27 ноя 2007, 18:37
mhalion
Написал DLL'у с простой логической процедуркой:

Код: Выделить всё

function LOG_AND(p1, p2:PDWORD):DWORD; stdcall; export;
begin
  if (p1 = nil) or (p2 = nil) then Result := 0
  else Result := p1^ and p2^;
end;
exports LOG_AND;
begin
end.
Это компилю в DLL и сам файл перемещаю в папку UDF в папке с InterBase. Потом в IBConsole прописываю процедуру в форме для прописывания внешних процедур и получаю:

Код: Выделить всё

DECLARE EXTERNAL FUNCTION LOG_AND
INTEGER, INTEGER
RETURNS INTEGER BY VALUE 
ENTRY_POINT 'LOG_AND' MODULE_NAME 'LFUNC.dll';
Далее использую её в запросе:
... LOG_AND(TBL.FLAG,1) = 0 ...

И в результате запрос не выполняется, а я получаю:
function LOG_AND is not defined.
module name or entrypoint could not be found.

Так может где-то ещё нужно прописать объявление этого модуля?

Добавлено: 27 ноя 2007, 19:34
hvlad
Кто тебя научил
а) обзывать ф-ции процедурками
б) использовать stdcall в UDF
?

Добавлено: 28 ноя 2007, 02:22
kdv
непонятно, откуда взят PDWord и зачем оно. я бы посоветовал почитать статью про udf на ibase.ru, перестать использовать IConsole, и выкинуть IB если используется версия 6.0.