Marshaling структуры, содержащей массив структур, содержащих структуры
От: Albeoris  
Дата: 15.11.13 13:42
Оценка:
Доброго времени суток!

WinAPI'ый метод принимает на вход указатель на структуру Top.

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
struct Top
{
  int Count;       // DWORD
  Middle[] Childs; // Указатель на массив
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
struct Middle
{
  [MarshalAs(UnmanagedType.LPStr)]
  string ID;   // LPSTR
  bool Flag;   // BOOL
  Bottom Data; // Не указатель
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
struct Bottom 
{
  int Size;       // Размер данных
  IntPtr DataPtr; // Указатель на данные
}



Вызов:
[DllImport("MyLib.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool MyFunc([In] ref Top topStruct);

Завершается с ошибкой:
Параметр задан неверно. (Исключение из HRESUL: 0x80070057 (E_INVALIDARG))

В чём я не прав? Неверно передался дочерний массив? ref для структуры не подходит, как замена указателя?
"Хаос всегда побеждает порядок, поскольку лучше организован." (с) Терри Пратчетт
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.