Re: share a structure array containing multidimensional char array



Hi,

My original structure is like shown below
struct msg_file_s
{
unsigned char mb_buffer[256][256];
unsigned char other[64];
};

struct msg_file_s msg_file[16];

This structure will execute on communication dll ( written with C++ ).
Applications will use this dll.
We have not the chance to edit it because we use for several projects for 15
years.
We use this MMF with VC++ 5 / VC++ 6 / BCB 6 on NT4 / 2000 / 2003 / XP.
We do not have any problem.

Best Regards
--
Aykut ERGİN
Nortel Netaş
Software Design Engineer



"Willy Denoyette [MVP]" wrote:

"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.




.



Relevant Pages

  • Re: share a structure array containing multidimensional char array
    ... C++ code doesnot make any serialization. ... I thought that it is very hard to memory map structure array. ... // pBuf is the pointer that points to the shared memory buffer returned ... I am passing pointer to the structure array as shown below for C++; ...
    (microsoft.public.dotnet.languages.csharp)
  • Re: share a structure array containing multidimensional char array C#/
    ... I already have C++ code for handling memory mapped file. ... I am passing pointer to the structure array as shown below for C++; ... 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. ...
    (microsoft.public.dotnet.languages.csharp)
  • Initializing structure arrays
    ... structure array with fields ... myArray.name='John Chrysanthemum Doe'; ... however, due to matlab's delayed copy, it does not actually allocate ... memory for this. ...
    (comp.soft-sys.matlab)
  • Re: memmapfile
    ... It is true that I could simply use C functionality to memory ... function and a matlab memory mapped file in matlab). ...
    (comp.soft-sys.matlab)
  • Re: memmapfile
    ... It is true that I could simply use C functionality to memory ... function and a matlab memory mapped file in matlab). ...
    (comp.soft-sys.matlab)