Blittable Vs. Не Blittable в IL - PullRequest
4 голосов
/ 22 марта 2010

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

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

Ответы [ 3 ]

3 голосов
/ 07 апреля 2010

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

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

3 голосов
/ 22 марта 2010

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

2 голосов
/ 22 марта 2010

Там нет ничего, связанного с маршалингом в ил.

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

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

...