Примитивные типы
Примитивные типы представляют собой типы малых значений, которые копируются в стек (или регистр CPU), когда вы используете их в качестве параметров функций или возвращаемых значений. При вызовах неуправляемых функций вам не нужно привязывать или иным образом управлять жизненным циклом примитивных типов.
C# имеет различные имена для многих примитивных типов по сравнению с C и другими языками. См. Типы данных при вызове платформенного кода для списка неуправляемых типов языка C, которые соответствуют управляемым типам C#.
Следующая таблица показывает тип C, который каждый тип C# марширует к по умолчанию. Маршалинг по умолчанию — это отправная точка, а не гарантия: он может различаться в зависимости от платформы и контекста (параметр, возвращаемое значение или поле структуры). Например, System.Boolean marshals к 4-байтному значению по умолчанию, и System.Char маршалов в соответствии с CharSet звонка. Использование MarshalAsAttribute для контроля точного представления, когда по умолчанию не то, что вам нужно.
Ниже приводятся некоторые примеры:
| C# базовый тип | C# псевдоним | Неуправляемый тип C |
|---|---|---|
| System.Int32 | инт | int32_t |
| System.Single | поплавок | поплавок |
| System.Char | символ | символ |
| System.Boolean | логическое | int32_t |
| System.Byte | байт | без знака |
Примечание: Используйте типы C с фиксированной шириной (например, int32_t из <stdint.h>) в своем собственном коде, а не int или long. Размер long, в частности, зависит от платформы: он 32-битный на Windows, но 64-битный на большинстве других настольных и мобильных платформ. Если управляемая и неуправляемая стороны не согласны с размером типа, данные повреждаются.