Nedd help with marshaling:
have this struct in C:
typedef struct OB{
unsigned char bC;
unsigned char bR;
unsigned short wC;
VARBLK(MAX_SIZE) Im;
VARBLK(MAX_SIZE) Te;
} OB;
With VARBLK defined like this:
typedef struct tagVARBLKHDR {
int iSize;
} VARBLKHDR;
#define VARBLK(size) \
struct { \
VARBLKHDR Hdr; \
unsigned char Array[(size)]; \
}
#define VARBLK_SIZEOF(arraysize) \
(sizeof(VARBLK(arraysize)))
#define VARBLK_SIZE(block) \
((block).Hdr.iSize)
#define VARBLK_PTR(block) \
((block).Array)
#ifdef __cplusplus
}
Can anyone help me in some choices to marshal that?
I has tryed many things like:
public struct VARBLK
{
public VARBLKHDR Hdr;
[MarshalAs(UnmanagedType.SafeArray)]
public byte[] Array;
}
[StructLayout(LayoutKind.Auto, CharSet = CharSet.Ansi)]
public struct VARBLKHDR
{
public int iSize;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct OB
{
public byte bC;
public byte bR;
public short wC;
public IntPtr Im;
public IntPtr Te;
}
then doing
IntPtr aux=((OB)(oo)).Im;
object pp = Marshal.PtrToStructure(aux,typeof(VARBLK));
But it keeps giving to me a lot of xception...
THanks in advance for any help
Mattias Sj?gren - 19 Jan 2005 21:13 GMT
David,
>Nedd help with marshaling:
>
[quoted text clipped - 7 lines]
>VARBLK(MAX_SIZE) Te;
>} OB;
Try it like this
public struct OB
{
public byte bC;
public byte bR;
public short wC;
public int ImSize;
[MarshalAs(UnmanagedType.ByValArray, SizeConst=MAX_SIZE)]
public byte[] ImArray;
public int TeSize;
[MarshalAs(UnmanagedType.ByValArray, SizeConst=MAX_SIZE)]
public byte[] TeArray;
}
Mattias

Signature
Mattias Sjögren [MVP] mattias @ mvps.org
http://www.msjogren.net/dotnet/ | http://www.dotnetinterop.com
Please reply only to the newsgroup.