Доброго времени суток!
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 для структуры не подходит, как замена указателя?
"Хаос всегда побеждает порядок, поскольку лучше организован." (с) Терри Пратчетт