In the past I've always written a .NET wrapper for COM and C++ DLLs and placed it within it's own class library.
The wrapper can deal with all interop calls to the dll.
It also allows you to perform data conversion and error reporting that would be meaningful to both parties (your NET application and the COM DLL).
I would think that this should solve your problem.
EDIT
Actually I've thought further on this and the above process won't work. This is because the X86, x64 and Itanium target processors are so fundamentally different.
edited x64 is able to run x86 targetted code and so can Itanium (which used an emulator and now an extension EM64T)
There's more information here
What you may be able to do though is run your x86 dll within a separate process and implement some form of communication between them. I guess that this is why you mentioned WCF. I say this because x86 software should run on x64 system.
This would mean that your solution would have two executables one x86 and one AnyCPU, as an assembly can only be targetted at one CPU type.