powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / FieldOffset и несколько структур в одном определении
5 сообщений из 5, страница 1 из 1
FieldOffset и несколько структур в одном определении
    #39740456
Ciplusor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При попытке скормить в 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
FieldOffset и несколько структур в одном определении
    #39740471
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ciplusor,

А полный код можно увидеть?
...
Рейтинг: 0 / 0
FieldOffset и несколько структур в одном определении
    #39740472
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
FieldOffset и несколько структур в одном определении
    #39740474
Ciplusor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил, полный большой, там куча вложенных структур типа нижеуказанных. Если внутренности этих структур сделать простыми типами одного размера - то бага нет. Как будто при использовании 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
FieldOffset и несколько структур в одном определении
    #39740522
Ciplusor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны StructLayout(LayoutKind.Sequential) ?Спасибо, по наводке методом тыка убрал все структуры с смещения в одну промежуточную структуру - вроде как работает
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / FieldOffset и несколько структур в одном определении
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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