MarshalAs атрибут тематическое исследование - PullRequest
5 голосов
/ 16 июня 2011

Когда мы должны использовать этот атрибут и зачем он нам нужен?Например, если нативная функция в c принимает в качестве параметра указатель на unsigned char, и я знаю, что это необходимо для выполнения массива unsigned char, почему я не могу использовать массив байтов в C # для использования этой функции?Нужно ли делать сортировку?

Ответы [ 2 ]

6 голосов
/ 16 июня 2011

Среда выполнения в большинстве случаев сможет автоматически определять, как выполнить маршалинг данных между собственным и управляемым кодом, поэтому обычно вам не нужно указывать атрибут.MarshalAs необходимо только в том случае, если в определении есть неоднозначность (и вы хотите точно указать среде выполнения, как нужно упорядочить данные) или если вам требуется поведение не по умолчанию.

По моему опыту, MarshalAs действительно требуется только при работе со строками, поскольку в нативном коде так много разных представлений;Unicode / ANSI, C-строки или нет, и т. д.

1 голос
/ 16 июня 2011

Дополнительное использование атрибута MarshalAs - сортировка массивов фиксированного размера (включая строки фиксированного размера) с параметрами ByValArray и SizeConst.Например, многие структуры из Windows API содержат строки фиксированного размера.

...