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,

serkan sendur commented: nice question +6

Recommended Answers

All 3 Replies

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?

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.