Blittable Vs. Не Blittable в IL

Я пытаюсь убедиться, что мои звонки с управляемых на неуправляемые оптимизированы. Есть ли быстрый способ увидеть, посмотрев на IL, какие-нибудь неблизкие типы случайно попали в мои вызовы пинвока?

Я попытался просто написать две неуправляемые функции в.dll, одну, которая использует bool (которая не является blittable) и одну, которая использует целые числа. Но я не видел ничего иного, когда смотрел на ИЛ, чтобы дать мне понять, что он делает что-то еще, чтобы выстроить бул.

3 ответа

Решение

В IL нет вещей, связанных с маршалингом. Вместо этого вы должны анализировать типы параметров методов (с модификаторами) и возвращаемые типы, следуя правилам, описанным в MSDN. Эти правила довольно просты, должна быть возможность написать автоматическую проверку и подключить ее, например, к FxCop.

Антон Тихий прав. Анализ типов - это то, что вам нужно; поиск по IL не поможет вам. Я рекомендую прочитать следующие статьи, чтобы решить, правильно ли вы это делаете.

Надеюсь, поможет.

В IL нет вещей, связанных с маршалингом.

Это не правда.

Даже для "bool" может потребоваться выполнить маршалинг в зависимости от того, как "bool" определено в неуправляемом языке. Например, только в MS C++ есть два типа 'bool', который составляет 1 байт, и 'BOOL', который составляет 4 байта. С другой стороны, я думаю, .Net bool имеет размер 1 байт, поэтому вам, возможно, придется указать, как его упорядочить в зависимости от размера неуправляемого bool.

Другие вопросы по тегам