dbxfb не обнаруживается при использовании firebird 2.5

На моей машине разработки у меня есть Delphi 10.2 и Firebird 2.5. Приложения баз данных, которые я создаю в этой конфигурации, работают правильно.

Я скопировал одну программу вместе с ее базой данных на другой компьютер под управлением Windows 10. Я установил Firebird; Я также установил на этот компьютер SQL Manager Lite для InterBase / Firebird, и эта программа может открывать базу данных и просматривать содержащиеся в ней данные. Но моя программа на Delphi не может открыть базу данных, отображая сообщение об ошибке «Не удалось загрузить dbxfb.dll (код ошибки 193)». Возможно, он отсутствует в системном пути ».

Я скопировал dbxfb.dll в любое место, о котором я могу думать (тот же каталог, где находится программа, тот же каталог, где находится база данных, windows \ system32, C: \ Program Files (x86) \ Firebird и т. Д. ), но сообщение остается прежним. На моей машине разработки то, что я считаю путем (т.е. системные свойства \ расширенные \ переменные среды), содержит только каталог% USERPROFILE% \ AppData \ Local \ Microsoft \ WindowsApps. На другом компьютере я добавил C: \ Program Files (x86) \ Firebird, но безрезультатно.

Итак, где должен находиться dbxfb.dll, или как мне сказать моей программе, где его найти?

Изменить: Что касается «разрядности», оба компьютера 64-разрядные. В диалоговом окне «Параметры проекта» в Delphi есть только 32-битный вариант. Я установил для программы параметр совместимости с Windows 8, но это не повлияло на отсутствующую dll.

Дальнейшее редактирование: версия, которая есть / была на целевой машине, имеет размер 1412 КБ и датирована 13.11.2015 1:55; эта версия явно взята из C: \ Program Files (x86) \ Embarcadero \ Studio \ 17.0 \ bin64, так что это определенно неправильная версия.

В C: \ Program Files (x86) \ Embarcadero \ Studio \ 17.0 \ bin есть версия размером всего 278 КБ, та же дата, но час 06:55. Копирование меньшего файла на целевой компьютер и запуск программы теперь дает другое сообщение об ошибке: ошибка ввода-вывода во время операции @ 1 для файла @ 2. Ошибка при попытке открыть файл.


person No'am Newman    schedule 22.01.2021    source источник
comment
Имя файла dbxfb.dll звучит так, как будто вы используете компоненты DBExpress в своем проекте. Это верно?   -  person MartynA    schedule 22.01.2021
comment
Этот файл определенно не принадлежит ни одному каталогу Firebird. Это библиотека, используемая вашим приложением, а не Firebird. Я ничего не знаю о Delphi, но может ли это быть проблема с 64-битным приложением или 32-битной библиотекой (или наоборот)?   -  person Mark Rotteveel    schedule 22.01.2021
comment
@MartynA: Да, dbExpress. Эта версия является портом предыдущей версии Delphi 7; Мне нужна была правильная поддержка юникода для русского ввода / вывода.   -  person No'am Newman    schedule 22.01.2021
comment
Убедитесь, что у вас правильный - где вы его нашли в исходной системе? Вероятно, вы скопировали 64-битную DLL вместо необходимой 32-битной DLL или наоборот.   -  person Brian    schedule 22.01.2021
comment
Не уверен, что ваш ... XE3 ??? версия ведет себя так, но, может быть, вам будет какое-то вдохновение. github.com/the-Arioch/XE2fixes/blob/master/dbx_FB_no_ini. pas   -  person Arioch 'The    schedule 22.01.2021
comment
Также, нет, Unicode не нужен для поддержки русского языка, это делает Windows-1251 codepage. Юникод необходим, если вы хотите поддерживать русский И некоторые другие расширенные языки, такие как греческий, испанский, немецкий. Если все, что вам нужно, это русский плюс базовая латынь (английский без расширенных символов), тогда Delphi 5/7 подойдет. Кроме того, есть элементы управления TNT Unicode для Delphi 7, при условии, что они охватывают только стандартный VCL, а библиотеки db-connection - это совсем другая история.   -  person Arioch 'The    schedule 22.01.2021
comment
In the Project Options dialog box in Delphi, there is only the option of 32 bits. вы можете щелкнуть правой кнопкой мыши AFAIR (или что-то еще, что трудно найти) и добавить любую другую архитектуру, например x64. Не то чтобы вам это могло понадобиться, просто для полноты картины :-)   -  person Arioch 'The    schedule 22.01.2021
comment
i/o error during "@1" operation for file "@2". Error while trying to open file. Я подозреваю, что это исходит от Firebird, который не был полностью установлен, не может найти подходящую версию firebird.msg (соответствующую fbclient.dll). Но, возможно, отсутствующий файл - это какая-то другая таблица описаний ошибок. В любом случае, используйте стандартный инструмент SysInternals Process Monitor, чтобы увидеть, какой файловый ввод-вывод ваше приложение генерировало в последние моменты перед отображением ошибки, и найдите подсказки, в чем заключалась ошибка.   -  person Arioch 'The    schedule 22.01.2021
comment
@ Arioch'The: Re unicode - основной язык программы - иврит, за которым следует английский. Русский и французский - дополнительные обязательные языки. Я действительно использовал элементы управления TNT unicode, но одним из основных препятствий была возможность сохранить русский текст в INI-файле.   -  person No'am Newman    schedule 23.01.2021
comment
@ No'amNewman по определению .ini-файлы Windows - это MBCS, а не Unicode. Создание Unicode .ini может нарушить совместимость с редакторами, другими приложениями и, возможно, с Windows ProfileString API тоже. Почему бы не использовать JSON или XML? Существует множество библиотек сериализации записей / объектов для Delphi, начиная с mORMot (JSON) и JediVCL (ini / registry / xml / DB)?   -  person Arioch 'The    schedule 23.01.2021


Ответы (1)


https://docs.microsoft.com/en-us/windows/win32/debug/system-error-codes--0-499-

ERROR_BAD_EXE_FORMAT

193 (0xC1)

%1 is not a valid Win32 application.

Это действительно проблема разрядности, предложенная Марком.

person Community    schedule 22.01.2021
comment
Сообщение об ошибке касается отсутствующей библиотеки DLL, которая находится не «на пути». Почему программа должна работать на одном компьютере, а не на другом, если на обоих установлена ​​64-разрядная версия Windows 10? - person No'am Newman; 22.01.2021
comment
@ No'amNewman Нет, в сообщении об ошибке не говорится, что файл отсутствует. Он просто говорит, что его нельзя загрузить. И код 193 не для отсутствующих файлов. - person Olivier; 22.01.2021
comment
Я собираюсь отметить это как правильный ответ - моя первоначальная проблема заключалась в том, что я связывал неправильную dll (64 бита вместо 32 бита). - person No'am Newman; 23.01.2021