Я пытаюсь создать дескриптор типа структуры, потому что мне нужен привязанный указатель к нему, но я получаю сообщение об ошибке "Объект содержит не примитивные или невоспроизводимые данные"
Моя структура выглядит следующим образом:
[StructLayout(LayoutKind.Sequential)]
public struct MyStruct
{
[MarshalAs(UnmanagedType.U1)]
public bool Test;
}
Теперь, когда я звоню,
var mystruct = new MyStruct();
var handle = GCHandle.Alloc(mystruct, GCHandleType.Pinned);
Я получаю сообщение об ошибке "Объект содержит не примитивные или невоспроизводимые данные". Теперь я понимаю, что поле bool является неимпульсным типом. Но у меня создалось впечатление, что добавив атрибут MarshalAs, я мог бы сказать маршаллеру, как преобразовать тип. (Я также пробовал UnmanagedType.Bool
)
Эта структура должна быть определена глобально, потому что она необходима во всем классе. Единственной причиной, по которой мне нужен указатель, является то, что у меня есть неуправляемый API, который должен передать эту структуру как указатель. Затем я должен получить эту структуру в элементах обратного вызова и чтения/обновления.
Итак, это основной сценарий.
- Структура создается глобально в управляемом классе
- Получен указатель на структуру
- Указатель на структуру передается в API
- API вызывает обратный вызов статического метода, когда мне тогда нужно получить свою структуру и прочитать/обновить элементы.
Я пытался использовать Marshal.StructureToPtr
, но это создает только копию, поэтому, если в моем управляемом классе я обновляю член, когда обратный вызов будет поднят, обновленное значение не будет.
Кто-нибудь знает, как я могу получить привязанный указатель на мою структуру, чтобы я мог читать/изменять публичные элементы и иметь их в обратном вызове?
Спасибо