Речь о
#pragma managed
#pragma unmanaged
которые предписывают компилятору нижележащий код обрабатывать, соответственно, как управляемый (генерируя IL) или native (генерируя ассемблер целевой платформы).
Как показывает практика, по крайней мере в VS2008 механизм какой-то глючный.
Возможные глюки:
Если собрать статическую библиотеку с mixed-кодом, может возникнуть
LNK1127: Library is corrupt.
Но даже если библиотека переварена, всегда остаётся шанс для:
LNK1000: Internal unknown linker error.
Разумеется, у Microsoft никаких внятных объяснений для этих ошибок нет - по сути это нештатная ситуация.
Что надо делать:
1) Проверить, чтобы pragma была объявлена
после всех include.
2) Если не помогает, удалить pragma из собственных header.
3) Если не помогает, удалить отовсюду.
Сборка тогда будет идти в соответствии с типом проекта: либо весь проект - управляемый код (в случае включенного /clr), либо весь проект - native-код. В последнем случае pragma игнорируется. И придётся по-разному собирающийся код раскидать по разным проектам.
Как вариант, можно вручную управлять параметром /clr в настройках каждого cpp-файла проекта, указывая, как его собирать. В любом случае, если такие глюки появились, придётся отказаться от mixed-кода внутри одной единицы компиляции (obj-файла).
Особенно неприятно получается с template-кодом, который как правило находится в header-файлах, и потому может собираться в разных местах в разных режимах, что не добавляет "здоровья" линкеру.