share a structure array containing multidimensional char array C#/

share a structure array containing multidimensional char array C#/

Post by QXlrdXQgRX » Sat, 12 Apr 2008 00:03:00


I want to share a structure array containing multi dimensional char array
between C# and C++, by using memory mapped file.

I already have C++ code for handling memory mapped file.
I am passing pointer to the structure array as shown below for C++;
I am able to work with pointer ( for C++ ).
C++ code works fine.

I am working on converting code for memory mapped file in C#.
My problems:
1. How should I define structure array in C# ( for the below structure array
).
2. How should I define pointer to structure array in C# ( for the below
structure array ).

Any help related to this would be highly appreciated.

C++ implementation:

struct msg_file_s
{
unsigned char mb_buffer[1000][1000];
.....
.....
};

struct msg_file_s msg_file[16];
struct msg_file_s *msg_file_ptr;


HANDLE api_map_memory(struct msg_file_s **msg_file_ptr)
{
HANDLE hKernel = CreateFileMapping ( (HANDLE) 0xFFFFFFFF,
NULL,

PAGE_READWRITE,
0,

sizeof( struct msg_file_s ),

_T("TEST"));

*msg_file_ptr = (struct msg_file_s *) MapViewOfFile( hKernel,

FILE_MAP_READ | FILE_MAP_WRITE,
0,
0,
0 );
return(hKernel);
}


map_memory_file(int index)
{
msg_file_ptr = &msg_file[index];
hKernel = api_map_memory(&msg_file_ptr);
}

/****************************************************************************/

C# implementation:

[StructLayout(LayoutKind.Sequential)]
unsafe struct msg_file_s
{
[MarshalAs(UnmanagedType.LPArray, ArraySubType= UnmanagedType.U1,
SizeConst = 100, SizeParamIndex=2)]
byte[,] mb_buffer;
}


--
Aykut ERG陌N
Nortel Neta艧
Software Design Engineer
 
 
 

share a structure array containing multidimensional char array C#/

Post by Willy Deno » Sat, 12 Apr 2008 02:39:28


Are you sure you want to pass such a huge amount of data through Shared
memory (MM file)?
I see in your declaration that one element is already 1000000 bytes, how
large are the other elements? and how large is the array of structures you
want to share?

Note that passing data through Shared Memory requires a lot more memory
because you'll have to marshal the data from unmanaged memory to managed
memory before you will be able to access the managed presentation of the
unmanaged data. Note that the extra marshaling will reduce the performance
advantage of the shared memory "transfer" significantly, if not completely.

Willy.