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

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
mhalion
Сообщения: 23
Зарегистрирован: 18 ноя 2007, 18:38

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

Сообщение mhalion » 27 ноя 2007, 18:37

Написал 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.

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

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Сообщение hvlad » 27 ноя 2007, 19:34

Кто тебя научил
а) обзывать ф-ции процедурками
б) использовать stdcall в UDF
?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 28 ноя 2007, 02:22

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

Ответить