Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2018, 22:45   #1
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию FireBird не видит udf

Доброе время суток форумчане,

У меня FireBird 3.0 х64 Написал простенькую dll, закинул ее в директорию c Firebird - UDF (c:\Program Files\Software developments\Firebird_3_0\UDF)

Код:
library my;

uses
  SysUtils,
  Classes;

{$R *.res}

function mm: integer; cdecl; export;
begin
  result := 1+1;
end;

exports
  mm;

begin
  isMultiThread:=True;
end.
Отладил на Delphi – работает
Объявил ее в базе:

Код:
DECLARE EXTERNAL FUNCTION "mm"
RETURNS INTEGER BY VALUE
ENTRY_POINT 'mm' MODULE_NAME 'my';
В IBExpert (пытаюсь записать в поле результат функции):

Код:
update SERVICES_TABLE
set field6 = "mm"()
where DESCRIPTION = 'user manual'
ошибка:

can't format message 13:896 -- message system code -4. invalid request BLR at offset 39.
function mm is not defined.
module name or entrypoint could not be found.

Уже пытался перенесли udf в другую дерикторию, в «firebird.conf»

Код:
UdfAccess = Restrict D:\MyUDF
Не помогает
Все началось из сторонней dll с такой же ошибкой

Что может быть?
Заранее спасибо за ответ

Последний раз редактировалось KBO; 11.12.2018 в 22:47.
KBO вне форума Ответить с цитированием
Старый 12.12.2018, 03:56   #2
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

Методом пробы: перенес данную библиотеку на ПК архитектурой х86 и все заработало.
Но БД у меня стоит на х64
Как быть?
KBO вне форума Ответить с цитированием
Старый 12.12.2018, 07:29   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

dll сделать 64-битную
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 12.12.2018, 14:17   #4
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
dll сделать 64-битную
Я не против, а чем?
У меня только Delphi 10.2 Embarcadero, а там только "linux x64"
KBO вне форума Ответить с цитированием
Старый 12.12.2018, 14:34   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

я не разу не сталкивался, посмотрите здесь - http://docwiki.embarcadero.com/RADSt...on_Development

раздел Configuring a 64-bit Windows Application in the IDE
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.12.2018, 14:51   #6
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

Да, спасибо разобрался, в окне "Platforms" просто нужно добавить новую платформу для Windows x64

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
я не разу не сталкивался,...
А почему не сталкивались? не было необходимости или по каким-то своим домыслам делаете все под х32?

Да, Теперь нужно как-то dll помечать для разных ахитектур.
KBO вне форума Ответить с цитированием
Старый 12.12.2018, 15:24   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от KBO Посмотреть сообщение
А почему не сталкивались? не было необходимости
не было необходимости.
и возможности.


Цитата:
Сообщение от KBO Посмотреть сообщение
Да, Теперь нужно как-то dll помечать для разных ахитектур.
как варинант - поменяйте ей имя на my.x64.dll
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.12.2018, 16:01   #8
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
как варинант - поменяйте ей имя на my.x64.dll
Та я решил в свойствах файла самой dll (в "FileDescription") дописать "х64".
А то там где я занимаюсь разработкой стоит "firebird x64", а там где работает непосредственно БД - "firebird x32".
С переименовкой названия файла, нужно будет в самой БД всякий раз менять, а так нет (хотя это и не наглядно).
KBO вне форума Ответить с цитированием
Старый 12.12.2018, 16:09   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от KBO Посмотреть сообщение
С переименовкой названия файла, нужно будет в самой БД всякий раз менять, а так нет (хотя это и не наглядно).
что значит - "менять" ?
При переустановке БД на другой компьютер?
в установленной БД ничего менять не надо.

А так, если БД установлена 64 битная, то и DLL должна быть 64 битная.
А если устанавливаете БД 32-х битную, то нужно подкладывать 32-х битную DLL

Вас не смущает, что установщик 32-х битной версии называется "Firebird-3.0.4.33054_0_Win32.exe", а 64-х битной - "Firebird-3.0.4.33054_0_x64.exe" ?

а своим решением Вы только усложнили жизнь тому, кто будет устанавливать/сопровождать/переносить вашу систему на другой комп. имхо, разумеется.
Впрочем, это ваше дело. Хозяин - барин!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.12.2018, 16:49   #10
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
что значит - "менять" ?
При переустановке БД на другой компьютер?
в установленной БД ничего менять не надо.
Я имел в виду в самой базе, например когда смотришь ее IBExpert, то в блоке "UDFs" (левое окно), один из параметров которые там нужно указывать "Library Name" (при объявлении/подключении udf).
Таким образом, если я буду тягать базу с х32 на х64 (и библиотека будет по разному называться), то тогда мне и в БД предется переименовывать название библиотеки (чтоб она подхватывалась базой)
KBO вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ChromeDriver не видит элементы. А GeckoDriver видит. DedPerded Общие вопросы Web 2 17.08.2018 12:22
Спарсить то что видит снифер, но не видит браузер... FleXik Общие вопросы Delphi 8 11.12.2012 00:44
udf для firebird Sparky Помощь студентам 5 15.11.2012 17:01
Firebird.Не могу подключить UDF. -COREY- БД в Delphi 0 08.05.2012 15:15
Ошибка при декларировании функции в Firebird из UDF shurik_7866 БД в Delphi 1 30.07.2007 08:55