I am using Named Pipes to transfer data from a client (C++) to a server (C#), the client does the following:

struct MESSAGE
   {
   char    cCommand[8];
   string  sParameter;
   };

MESSAGE msg;
strcpy(msg.cCommand, "COMMAND");
strcpy(msg.sParameter, "DO SOMETHING");

DWORD dwWrote = 0;
WriteFile (hpipe, &msg, sizeof(msg), dwWrote, NULL);

Then, at the receiving end the C# server does the following:

IntPtr chRequest;
bool fSuccess = ReadFile(hPipeInst, chRequest, uSize, cbRead, OverlappedPtr);
if (fSuccess)
	byte[] temp = Encoding.ASCII.GetBytes(Marshal.PtrToStringAnsi(chRequest));

Now, at the receiving end, I need to transform the temp (byte[]) back into the STRUCT or something equivalent so I can access the members cCommand and sPatameter - but at this point I have no clue how to proceed... In reality doesn't need to be a struct, I just need to extract the data itself.

Note - the STRUCT MESSAGE is something I came up with, meaning that it can be changed if a different format would be helpful in the reconstruction (add the length of sParameter for example?), I just need a COMMAND and PARAMETER to be transfered in a single block (if possible).

Requirements are simple:
- COMMAND is a fixed-length 8-characters long string that indicates what action needs to be performed
- PARAMETER is a variable-length (unless this causes issues) parameter dependant on each COMMAND

For example:
COMMAND = TRANS
PARAMETER = C:\FILE.txt C:\NewFolder\FILE.TXT
(this is just to illustrate, there are a lot more applications)


If possible I would like to extract it as a chunk of data (byte[]) and then pass it along to my application where it could be decomposed, not a fan of reading in the size, then a field, then a size, then a field - that requires that my Communication be overly linked with my implementation.


If there is a more suitable way to implement this transfer please let me know... advice would be welcome...
Any help would be much appreciated.
Thanks,

Comments
nice question

never worked with struct but this can be done with help of byte array..

or there are many possiblities....u can do this..

try googling around...

I'm already using a byte array (byte[] temp) to get the data from the ReadFile - but how can I convert this into the corresponding cCommand and sParameter?

This article has been dead for over six months. Start a new discussion instead.