Запрос MarshalAs с вызовом управляемого кода Неуправляемый - PullRequest
0 голосов
/ 11 ноября 2011

Этот вопрос является результатом этой темы.

Мой вопрос: почему мы должны указывать атрибут MarshalAs для некоторых параметров, а не для других?Я бы подумал, что различия между типами данных c ++ и c # будут достаточно большими, чтобы требовать указания для компилятора?

Извините за мое незнание, поскольку я никогда раньше не имел дело с неуправляемым кодом:)

CheersАдам

1 Ответ

1 голос
/ 11 ноября 2011

Параметры, которые не маршалируются, это просто целые числа. Интты - это целые, это целые, везде, родные или нет. Поэтому не нужно никаких специальных инструкций, чтобы справиться с ними, значение просто передается по значению, и все готово.

Указатели и строки более хитры. Строки C # не обязательно представлены как строки C, которые просто являются указателями на массив символов с нулевым символом в конце. Внутреннее преобразование может быть необходимым. Точно так же массив должен быть передан по ссылке - и явно сказано сделать это.

Помните, что в неуправляемом коде адреса - это просто данные. В них нет ничего особенного. Поэтому компилятору C # нужно знать, как взять все, что он знает о ваших переменных, и превратить его в числа.

...