适用于Delphi xe的64位Oracle客户端

时间:2011-06-01 16:03:34

标签: oracle delphi 64-bit delphi-xe

如何为Delphi xe安装64位客户端(运行32位且具有32位客户端) 我可以在同一台机器上同时运行32位客户端和64位客户端吗?

我正在开发64位应用程序,所以我需要64位客户端

使用我获得的32位客户端

  

sourceException {“尝试加载Oracle客户端库会引发BadImageFormatException。在安装了32位Oracle客户端组件的64位模式下运行时会出现此问题。”} System.Exception {System.InvalidOperationException}

4 个答案:

答案 0 :(得分:4)

我在组织中已经多次看到,因为他们安装了64位操作系统(Windows 7 / Windows 2008 R2),他们认为必须安装64位Oracle客户端。

操作系统无法控制,应用程序会这样做。

  • 如果您的应用程序是32位,则必须使用32位客户端。
  • 如果您的应用程序是64位,则必须使用64位客户端。

Delphi XE是一个32位应用程序。它只能生成32位应用程序。

在您澄清问题后更新。

  • 您可以在计算机上安装多个Oracle客户端
  • 客户端可以是不同版本或Bitness
  • 必须将每个客户端安装到不同的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在系统搜索路径上使用oracle home。

虽然我从未尝试过,但您应该可以指定完整版本 Delphi中dbxdrivers.ini文件中的OCI.DLL指定实际的oracle 你想要使用的家。

答案 1 :(得分:2)

从错误消息中,我想你问的是32位和64位Oracle客户端是否可以在同一台机器上共存。

显然,they can。我自己没有这样做,所以你可能需要挖掘更多细节。

答案 2 :(得分:1)

如果客户端意味着某些x64 dll被加载到Delphi的x86应用程序中,则无法做到这一点。如果客户端是其他进程并使用某种形式的进程间通信,则可以。

所以你的选择是:

  • 使用FreePascal构建x64'delphi'客户端
  • 使用Delphi Prism(Delphi for .Net)在Delphi中构建(x64).Net客户端
  • 在不同的流程中进行策略并使用一种进程间通信
  • 使用32位版本的Oracle客户端
  • 使用另一个32位库来执行Oracle客户端的操作

答案 3 :(得分:1)

要从32位应用程序调用64位dll,请参阅A.Bouchez在this线程中的答案。