A couple of days ago I was asked if there is a way to interop with a native 32bit library from within an 64bit .NET application. Since the bitness is defined at process level and in .NET the bitness of the starting project determines the bitness of the process, there is only one way to achieve that: you have to spawn a new process, a 32bit process.
The following example of a generic 32bit wrapper application demonstrates how to execute managed code in a simple manner. The wrapper, targeting the x86 platform, is able to execute the specified static method "Main" of the given assembly. The assembly doesn't have to be an executing assembly itself.
// usage: RunAs32Bit.exe [ASSEMBLY] [ARGS ...]
static void Main(string[] args)
{
var assembly = Assembly.LoadFile(Path.GetFullPath(args[0]));
var type = assembly.GetTypes().FirstOrDefault(t => t.GetMethod("Main") != null);
var member = type.GetMethod("Main");
var arguments = args.Where((v, i) => i > 0).ToArray();
member.Invoke(type, new object[] { arguments });
}
Spawning a new process that will do some stuff (e.g. interop) may also mean that you have to do some inter-process communication (IPC). I suggest you to use WCF for that approach.