Marshalling C Struct com matriz de estruturas nele
Consultei as perguntas semelhantes neste fórum, mas não obtive a solução para o meu problema.
Eu tenho lutado com o problema do empacotamento por um tempo. Eu tenho uma estrutura que contém uma matriz de outra estrutura, a plataforma éWin CE. Estou usando o Visual Studio 2008 e o .NET CF 3.5.
O código:
Estruturas C:
struct dot11Rate
{
unsigned int rate;
unsigned char mode;
};
typedef struct my_supported_rates
{
unsigned short n_rates;
struct dot11Rate srates[36];
unsigned char isSet;
unsigned char no_of_HTStreams;
}MY_SUPPORTED_DATA_RATES;
O tamanho da estrutura MY_SUPPORTED_DATA_RATES é296 bytes noC
Esta é minha tentativa de convertê-lo em uma estrutura C #:
C # convertido:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct dot11Rate
{
public uint rate;
public byte mode; /* HT=1, non-HT=0*////
};
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct my_supported_rates
{
public ushort n_rates;
[MarshalAs(UnmanagedType.ByValArray,SizeConst = 36)]
public dot11Rate[] srates;
public byte isSet;
public byte no_of_HTStreams;
};
Aqui estou recebendo o tamanho304 bytes usandoMarshal.SizeOf(my_supported_rates);
Eu tentei as seguintes coisas sem sucesso:
Adicionando e removendo vários elementos de atribuição no atributo MarshalAs na estrutura my_supported_rates, comoArraySubType = UnmanagedType.Struct
Eu tenho Intptr com os dados necessários e tentei converter ptr para a estrutura usando o códigomy_supported_rates = (my_supported_rates) Marshal.PtrToStructure(ptr,my_supported_rates.GetType());
. Mas a conversão adequada não aconteceu.Algumas outras sugestões em blogs e StackOverflow que não se mostraram úteis para mim