Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / FieldOffset и несколько структур в одном определении / 5 сообщений из 5, страница 1 из 1
29.11.2018, 16:33
    #39740456
Ciplusor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FieldOffset и несколько структур в одном определении
При попытке скормить в API структуру такого типа - выходит ошибка "... так как он содержит поле объекта со смещением 16, которое неверно выровнено или перекрыто полем, не представляющим объект" хотя если заменить объявление структур на какой нибудь IntPtr ля дальнейшего маршаллинга - то ошибки нет. Неужели нельзя сразу описать структуру чтобы не пришлось прибегать к ручному маршаллингу каждой структуры в объявлении?

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
struct CallbackData
{
            ...
            [FieldOffset(16)]
            public TMyStruct1 MyStruct1;
            [FieldOffset(16)]
            public TMyStruct2 MyStruct2;
}
...
Рейтинг: 0 / 0
29.11.2018, 17:02
    #39740471
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FieldOffset и несколько структур в одном определении
Ciplusor,

А полный код можно увидеть?
...
Рейтинг: 0 / 0
29.11.2018, 17:05
    #39740472
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FieldOffset и несколько структур в одном определении
...
Рейтинг: 0 / 0
29.11.2018, 17:11
    #39740474
Ciplusor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FieldOffset и несколько структур в одном определении
Изопропил, полный большой, там куча вложенных структур типа нижеуказанных. Если внутренности этих структур сделать простыми типами одного размера - то бага нет. Как будто при использовании Explicit он разворачивает на стэк всю структуру (что собственно я так понимаю сломает AnyVar на 20 позиции. Пробовал каждой структуре указывать что то типа Size=500 чтобы имели фиксированный размер - но все равно не работает

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
        [StructLayout(LayoutKind.Explicit, Pack = 1)]
        public struct CallbackData
        {
            [FieldOffset(0)]
            public uint TypeID;
            [FieldOffset(4)]
            public uint Version;
            [FieldOffset(8)]
            public uint Flags;
            [FieldOffset(12)]
            public uint UserData;
            [FieldOffset(16)]
            public FileStatusData FileStatusData;
            [FieldOffset(16)]
            public ErrorData ErrorData;
            [FieldOffset(20)]
            public uint AnyVar;
        }

        [StructLayout(LayoutKind.Sequential, Pack = 1)]
        public struct FileStatusData
        {
            public uint Flags;
            public uint ScanAnswer;
            public FileInfo FileInfo;
            public MalwareInfo MalwareInfo;
            public uint Warning;
            public uint Info;
        }

        [StructLayout(LayoutKind.Sequential, Pack = 1)]
        public struct ErrorData
        {
            public FileInfo FileInfo;
            public uint Category;
            public uint Level;
            public int Code;
            public KeyValue Options; // TODO PSAVAPIKeyValue
        }
...
Рейтинг: 0 / 0
29.11.2018, 19:19
    #39740522
Ciplusor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FieldOffset и несколько структур в одном определении
Сон Веры Павловны StructLayout(LayoutKind.Sequential) ?Спасибо, по наводке методом тыка убрал все структуры с смещения в одну промежуточную структуру - вроде как работает
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / FieldOffset и несколько структур в одном определении / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]