I have a quick question for those familiar with inter-process communication.
Situation
- I have a program (program A) which I can add some code to, but very limited. This is the main program that generate a lot of data.
- The way the data is formulated is limited, so I would like to create a second program (program B) and hence need to get data from A to B. And even sometimes cause A to run some functions with no return value.
- I am aware of Named pipes, however I feel they might be bulky? - not sure though - I have for instance the following concerns (may be unfounded):
- data flow => convert to binary -> place data in memory -> server Read -> convert to string -> through probably a switch statement determine what is requested -> get what is requested -> convert to binary -> place in memory -> read by client and convert to string / some acceptable format.
- It has to use basically switch statements on both sides and if you want a different format of info other than string, you will need to take this into consideration
- one message might have to wait for another to complete, so it might be slower during a lot of calls to it at the same time? - not sure though
- Other inter process communication methods probably has the same problem.
Better solution I think would be to create an "object" - class. And share the object memory address between programs, thereby theoretically "merging" the A and B then:
- There is no problem with encode and decode issues etc
- Data is simply requested / invoked through calling a function.
- The function return the proper type and no need to establish what the correct type is (i.e. bool / int / string / double etc)
I understand that this also has several problems, i.e. if object gets removed from memory location by main / another program accessing it.
Question
- What is the best way to solve this problems:
- Is there an invoke option in C++ that will allow me to write and read from a memory address? at the moment:
- I can access same object between A and B, but I can't write / read as that will throw an exception. So basically can I through simple invoke perhaps read / write to this object?
- I am aware of WriteProcessMemory function - but this is not what I want - i.e. I don't necessarily want to change memory values, merely access data / invoke actions from B that A will perform.
- Is there a simple and easy way of doing this? I am aware of something called boost, but don't know anything about it - is this my best option? -> i.e. should I investigate this as my best solution?
Thank you in advance for any advise on this issue.