2013-04-09 2 views
0

Ниже приведен код, который я пытаюсь преобразовать из C++ в C#Marshalling тип данных вопрос

struct PSB { 
    short type_of_psb; 
    short call_dependent; 
    int32 del_psb_status; 
    uint32 seq_number[2]; 
    int32 uma_psb_status; 
    short psb_reserved[6]; 
} 

Ранее я писал ниже структуры.

 [StructLayout(LayoutKind.Explicit)] 
     public struct PSB 
     { 
      [FieldOffset(0)] 
      public short type_of_psb; 
      [FieldOffset(2)] 
      public short call_dependent; 
      [FieldOffset(4)] 
      public int del_psb_status; 
      [FieldOffset(8)] 
      [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] 
      public uint32 seq_number; // Here is the problem 
      [FieldOffset(16)] 
      public int uma_psb_status; 
      [FieldOffset(20)] 
      [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)] 
      public short[] psb_reserved; 
     } 

но выше C# код не работает, проблема заключается в членах seq_number

Так я изменил его в

public ulong seq_number из uint seq_number, и я удалил атрибут выше MarshalAs.

Теперь он работает с устаревшим кодом. Я не знаю почему? В чем проблема, если я определил как массив?

+0

Я не вижу, что 'seq_number' является массивом. –

+1

не должно быть 'public uint32 [] seq_number', я предполагаю, что ulong работает, потому что он будет храниться как два последовательных ints, но у вас может быть проблема LSB ... –

ответ

1

Ваш C++ struct и ваш атрибут MarshalAs оба указали тип как массив, но ваша структура C# объявляла только число. Я точно не знаю, какую ошибку вы получали, но похоже, что вы пытались преобразовать массив из двух чисел в один номер, что, очевидно, вызовет некоторые проблемы.

Попробуйте сохранить атрибут as-is в вашей размещенной структуре и просто замените public uint32 seq_number; на public uint32[] seq_number;.

+0

i прикладной public uint32 [] seq_number; , но проблема остается прежней. – kamal

+0

@kamal: отредактируйте свое сообщение с точной ошибкой, которую вы получаете, и кодом, который генерирует эту ошибку. – goric

Смежные вопросы