Re: share a structure array containing multidimensional char array
- From: Aykut Ergin <AykutErgin@xxxxxxxxxxxxxxxxxxxxxxxxx>
- Date: Thu, 10 Apr 2008 23:08:00 -0700
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.
- Follow-Ups:
- Re: share a structure array containing multidimensional char array
- From: Willy Denoyette [MVP]
- Re: share a structure array containing multidimensional char array
- References:
- share a structure array containing multidimensional char array C#/
- From: Aykut Ergin
- Re: share a structure array containing multidimensional char array C#/
- From: Willy Denoyette [MVP]
- share a structure array containing multidimensional char array C#/
- Prev by Date: Re: Intermittent problem with XML deserialization
- Next by Date: how to improve a performace to send some of data between machine.
- Previous by thread: Re: 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
|