Re: share a structure array containing multidimensional char array C#/
- From: "Willy Denoyette [MVP]" <willy.denoyette@xxxxxxxxxx>
- Date: Thu, 10 Apr 2008 19:39:28 +0200
"Aykut Ergin" <AykutErgin@xxxxxxxxxxxxxxxxxxxxxxxxx> wrote in message news:139D98E6-5572-4BB8-8FAD-E312F04F871A@xxxxxxxxxxxxxxxx
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
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.
.
- Follow-Ups:
- Re: share a structure array containing multidimensional char array
- From: Aykut Ergin
- Re: share a structure array containing multidimensional char array
- References:
- share a structure array containing multidimensional char array C#/
- From: Aykut Ergin
- share a structure array containing multidimensional char array C#/
- Prev by Date: Re: class name
- Next by Date: Re: Exception Type
- Previous by thread: share a structure array containing multidimensional char array C#/
- Next by thread: Re: share a structure array containing multidimensional char array
- Index(es):
Relevant Pages
|
Loading