Personally, I would go with the Boost.Asio library and transfer data between processes explicitly over a named pipe (Boost.Serialization or do it with JSON). This way, you won't get any funky my-memory-was-changed-by-another-process action, which will make debugging a million times easier.
The first option is going to be way easier to create if you can make your code generator do it for you, but you have to be extremely careful about your type definitions. The second option might a little tedious for some of the serialization, but should be easier to debug.
- Travis Gockel