Re[5]: C# помогите реализовтаь структуру (UNION)
От: Jolly Roger  
Дата: 22.09.10 03:01
Оценка:
Здравствуйте, vasiliy535, Вы писали:

V>Да вот я сейчас и пытаюсь этот костыль подпилить... А в рилнете реализовано всё, кроме RILMESSAGE (


Marshal не сможет её обработать, и это понятно, у него нет способа выяснить, какая из веток объединения актуальна. Потому надо маршалить вручную. Насколько я понял при беглом взгляде, там актуальная ветвь определяется константой в поле DWORD dwType. Эта RILMESSAGE ведь всегда по ссылке передаётся? Я-бы сделал её классом и написал к ней маршалер, который записывал-бы в буфер две независимые структуры, сначала ту, которая описывала-бы неизменную часть RILMESSAGE, а затем — одну из структур, описывающих каждую ветвь отдельно. Таким образом, маршалинг/демаршалинг будут состоять из двух вызовов Marshal.PtrToStructure/Marshal.StructureToPtr. Там есть ещё буферы фиксированного размера, возможно их тоже следует вынести из деклараций структур, чтобы избавиться от unsafe.
"Нормальные герои всегда идут в обход!"
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.