64-битный клиент Oracle для Delphi xe - PullRequest
1 голос
/ 01 июня 2011

Как я могу установить 64-битный клиент для Delphi xe (который работает 32-битный и имеет 32-битный клиент) Могу ли я одновременно запустить 32-битный клиент и 64-битный клиент на одном компьютере?

Я занимаюсь разработкой 64-битного приложения, поэтому мне нужен 64-битный клиент

используя 32-битный клиент, я получаю

sourceException {"При попытке загрузить клиентские библиотеки Oracle возникла ошибка BadImageFormatException. Эта проблема возникает при работе в 64-битном режиме с установленными 32-битными клиентскими компонентами Oracle."} System.Exception {System.InvalidOperationException}

Ответы [ 4 ]

4 голосов
/ 01 июня 2011

Я неоднократно видел в своей организации, что, поскольку они установили 64-битную ОС (Windows 7 / Windows 2008 R2), они считают, что должны установить 64-битный клиент Oracle.

ОС не контролирует это, приложение делает.

  • Если ваше приложение 32-битное, оно должно использовать 32-битный клиент.
  • Если ваше приложение 64-битное, оно должно использовать 64-битный клиент.

Delphi XE - это 32-битное приложение. Он может создавать только 32-битные приложения.

Обновление после уточнения вашего вопроса.

  • На компьютере может быть установлено несколько клиентов Oracle
  • Клиенты могут быть разных версий или битности
  • Каждый клиент должен быть установлен в отдельную Oracle Home

Клиентское приложение должно быть достаточно умным, чтобы загружать правильные библиотеки. Обычно последний установленный клиент попадает в системный путь. Это обычно также дом по умолчанию.

Приложения загружают библиотеку OCI (OCI.DLL). Обычно они делают это с loadlibrary('oci.dll'), который собирается найти версию OCI.DLL по системному пути.

Я подозреваю, что именно это и является причиной вашей ошибки.

loadlibrary можно вызвать с полным путем, чтобы указать, какой клиент использовать. LoadLibrary('C:\app\oracle\product\11.2.0\client_1\bin\oci.dll')

По умолчанию Delphi использует дом оракула в системном поисковом пути.

Хотя я никогда не пробовал, вы сможете указать полную версию OCI.DLL в файле dbxdrivers.ini в Delphi, чтобы указать этого фактического оракула дом, который вы хотите использовать.

2 голосов
/ 01 июня 2011

Из сообщения об ошибке я думаю, что вы спрашиваете, могут ли 32- и 64-битные клиенты Oracle сосуществовать на одной машине.

Очевидно, они могут .Я сам этого не делал, поэтому вам, возможно, придется покопаться, чтобы узнать подробности.

1 голос
/ 01 июня 2011

Чтобы вызвать 64-битную DLL из 32-битного приложения, см. Ответ А.Бучеза в этом потоке.

1 голос
/ 01 июня 2011

Если под клиентом вы подразумеваете, что некоторые x64 dll загружаются в x86-приложения Delphi, вы не можете этого сделать. Вы можете сделать это, если клиент - это какой-то другой процесс и использовать некую форму межпроцессного взаимодействия.

Итак, ваши варианты:

  • Используйте FreePascal для создания x64-клиента Delphi
  • Использование Delphi Prism (Delphi для .Net) для создания (x64) .Net-клиента в Delphi
  • Сепаратировать как в разных процессах, так и использовать форму межпроцессного взаимодействия
  • Использовать 32-битную версию клиента Oracle
  • Используйте другую 32-битную библиотеку, чтобы сделать то, что делает клиент Oracle
...