We have a monolithic MFC GUI app that is nearing the end of it\'s life in C++. We are planning to build new functionality in C# and pass data between each app.
Quest
The options you list are certainly valid, but you could also consider COM.
My picks would be either standard window messages (e.g. WM_FOO) or DCOM:
Messages would work as long as the communication is very simple, and the overhead in setting it up is minimal. If you can boil the communication down to one or two integers per message, this would probably be a good place to start. If both apps are already windowed applications, they both already have message loops, so you're already most of the way there.
DCOM requires a lot more programmer overhead, but it's nice in that you can define a richer interface and avoid having to convert complex messages to/from binary form. If you go this route, CoRegisterClassObject is the starting point for publishing an object via DCOM. I've never tried doing this from a C# app, but in principle it should be entirely possible
Take your pick:
Why named pipes?
In .Net just use System.IO.Pipes.
In C++ use CreateNamedPipe and CreateFile.