Блиттабл против. Непреобразуемый в IL

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

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


person Michael Covelli    schedule 21.03.2010    source источник


Ответы (3)


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

person Anton Tykhyy    schedule 22.03.2010

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

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

person Ricardo Nolde    schedule 07.04.2010

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

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

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

person logicnp    schedule 22.03.2010
comment
Кажется, что-то там должно быть. Bool указан как непреобразуемый. Но я не вижу ничего необычного в IL, указывающего на то, что любая сортировка идет нормально, когда я смотрю на нее. - person Michael Covelli; 22.03.2010
comment
Так как там в ИЛ? Где сборка говорит, что bool не преобразовывается? Да, атрибутов MarshalAs может быть, но 1) это, строго говоря, не IL и 2) ни отсутствие, ни наличие MarshalAs ничего не говорит о неразборчивости — необходим анализ типов. - person Anton Tykhyy; 23.03.2010