Installing 32 bit and 64 bit Informix drivers on same machine

driversinformixodbc

Currently trying to setup a development environment which can handle both 32-bit and 64-bit ODBC Informix Drivers.

I'm was unsuccessful at finding any sort of guide or walk through online, however I did find bits and pieces which could lead to the solution. I'd just like a little more advice to ensure I'm on the correct path.

Driver Versions

Version 3.70.TC3, Windows (32 bit)

Version 3.70.FC3, Windows x64

Source

I can't seem to find versions 3.70.TC3 or 3.70.FC3, but I did find 3.70.TC7 and 3.70.FC7 directly from the IBM website, which I assume are just slightly updated versions.

Informix Driver Installations

The drivers are installed at the following locations (based on the registry entries)

  • 32-bit: C:\Program Files (x86)\IBM\Informix\Client-SDK\
  • 64-bit: C:\Program Files\IBM\Informix\Client-SDK\

Registry Entries

From what I can see, the registry entries for the drivers are located at:

  • 32-bit: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC\ODBC.INI
  • 64-bit: HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI

This essentially lists all of the data sources and their connection details. Both locations have the same number of data sources with the same names and same key/value pairs, with the exception of the Driver key which points to it's respective driver location; C:\Program Files\ or C:\Program Files (x86)\.

ODBC Administrator

The 32-bit ODBC Administrator is found at
%systemdrive%/Windows/SysWoW64/odbcad32.exe

Counterintuitively, the 64-bit ODBC Administrator is found at
%systemdrive%/Windows/System32/odbcad32.exe

Source

ODBC.INI

The ODBC.INI file is located at C:\Windows\ where the contents of that file lists the same data sources as those displayed in ODBC Administrator, and includes the key/value pair of the 32-bit drivers for each of those data sources; Driver32=C:\Program Files\IBM\Informix\Client-SDK\bin\iclit09b.dll.

Now what's interesting here is that although the key Driver32 is used, the value points to the C:\Program Files\ path as opposed to the C:\Program Files (x86)\ path, thereby associating the Driver32 to the 64-bit drivers.

I found the following page to explain this irregularity.

The WOW64 registry redirector intercepts calls made to certain
portions of the registry and redirects them to another portion of the
registry. Registry redirection affects the HKEY_LOCAL_MACHINE\SOFTWARE
key. Registry calls made to this key by 32-bit applications are
redirected to HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node.
So, for
example, when a 32-bit application calls SQLDataSources, the resultant
registry call is redirected from
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI to
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC\ODBC.INI, and the only
system data sources that are returned are ones for 32-bit ODBC
drivers.

Simply put, a 32-bit application which connects to the 64-bit ODBC drivers will automatically be redirected to the 32-bit drivers based on the registry entries, whereas a 64-bit application will need no such redirection.

If a 32-bit application attempts to connect to a valid user data
source for a 64-bit ODBC driver, the connection will succeed if a
32-bit version of the driver is installed. Otherwise, the connection
will fail with the "architecture mismatch" error. For example,
Microsoft’s SQL Server ODBC driver installs both
a 64-bit library
(%WINDIR%\System32\sqlsrv32.dll) and a 32-bit library
(%WINDIR%\SysWOW64\sqlsrv32.dll) on 64-bit Windows platforms.

In the case of Informix, the driver for each architecture MUST be installed separately.

Questions

What is the importance of the ODBC.INI file, and can I simply modify the Driver32 key to Driver64 or maybe have both in conjunction?

When executing the 32-bit ODBC Administrator and opening a data source I am able to modify the connection settings, however when executing the 64-bit version I receive the following error.

64-bit ODBC Administrator - Error 193

How can I change the system's current ODBC Administrator to the 64-bit version in order to avoid this error?

Best Answer

The issue was that I had installed the 3.50 version initially. This version is no longer supported and also does not have a 64-bit counterpart.

The resolution was to install the latest 4.1 drivers.