Load 32-bit shared library from 64-bit application?

Solution 1:

No, you cannot load a 32-bit library in a 64-bit application through conventional means.

There are some clever hacks out there such as having a 32-bit application which loads the library and exports the functions through an IPC interface, but if you have the option to compile the library as 64-bit, then that is by far the best choice.

Solution 2:

You cannot load dynamically or statically a 32-bit library from a 64-bit application or vice versa.

There are a number of work-arounds that I am aware of:

  1. Make a 64-bit version of the DLL
  2. Make a 32-bit version of the application
  3. Introduce a COM proxy object (also called a surrogate) as a communication intermediary. Described here.
  4. Host the DLL in a separate (32-bit) EXE and use an IPC technique

There are a number of inter-process communication (IPC) techniques. Here are a few examples:

  • named pipe
  • windows messsages
  • socket
  • HTTP listener
  • WCF service (described here)
  • .NET remoting