Это зависит от сопоставления поля - если это - (нечувствительный к регистру) ci или (чувствительный к регистру) cs. Уникальный индекс применялся бы соответственно.
Вы не можете вызвать эту конкретную перегрузку Marshal.PtrToStructure
с типом значения (то есть struct
).
Если вы вызовете с помощью этой перегрузки вы можете получить обратно экземпляр вашего типа.
Извините, что не привожу пример кода, но вот ссылка , которая может вам помочь.
Вот ключевой текст из приведенной выше ссылки:
Проблема не связана с RegisterTraceGuids API.
Согласно документу Marshal.PtrToStructure (IntPtr, Объект) http://msdn.microsoft.com/en-us/library/30ex8z62.aspx , это вызывает исключение ArgumentException, которое вы видели, когда макет структуры не последовательный или явный или структура тип значения в штучной упаковке.
В этом случае структура объявлен как последовательный, однако элементы в массиве (traceGuidReg [i]) заключены в рамку на управляемая куча из-за массива объект, поэтому вы получили ошибку "the структура не должна быть классом значений. "
Вам нужно будет использовать перегрузку Marshal.PtrToStructure Метод (IntPtr, Тип) http://msdn.microsoft.com/en-us/library/4ca6d5z7.aspx и присвоить результат PtrToStructure к элементам массива.