Стратегии для многоядерных сборок (/ MP), которые используют #import - PullRequest
19 голосов
/ 23 октября 2008

Я работаю над новой конфигурацией решения для нашего большого проекта VC ++ с использованием VS 2008. Мне бы хотелось, чтобы в этой конфигурации использовался флаг многоядерной сборки / MP .

Однако функция «#import» генерации классов-оболочек COM распространяется по всей базе кода, и эта функция не поддерживается при использовании /MP.

.

Я понимаю, почему #import не будет работать, Я хочу знать, сталкивался ли кто-нибудь с этой проблемой и как они обошли ее?

Я делаю следующее:

  • Не использовать флаг / MP для небольших проектов или за пределами справки. (возможно я вернусь к ним позже)
  • Удалил #import и заменил его более стандартным сгенерированным MIDL заголовком (#include). Это вариант только в некоторых местах, которые легко преобразовать в COM старой школы.
  • Создайте новый проект, который # импортирует остальные библиотеки. Сделайте эту сборку первой. # Включите файлы .tlh, которые он создает во всех местах, # импортированных ранее.

Мне любопытно, если у кого-нибудь есть какие-либо другие предложения? Кроме того, о последней точке (создание нового проекта и использование только там #import) - если вы сделали что-то вроде это, как ты это сделал? Какой тип проекта, как выглядел «источник», где вы выводили файлы? Как вы их включили? (знаешь, все думай за меня!)

Ответы [ 2 ]

8 голосов
/ 12 января 2009

У меня есть проект с двумя исходными файлами, которые #import одного и того же файла. При компиляции с / MP иногда возникала ошибка отказа в доступе, поскольку оба исходных файла пытались создать .tlb одновременно. Я исправил это, включив предварительно скомпилированные заголовки и добавив #import в предварительно скомпилированный исходный файл заголовка.

6 голосов
/ 05 июня 2009

Вы можете использовать параметр / MP для проекта в целом, а затем сделать исключение для отдельного файла, используя параметр / MP1 .

...