Предварительно скомпилированные заголовки C ++ / CLI:Как они работают?

StackOverflow https://stackoverflow.com/questions/1104715

Вопрос

Я пытаюсь написать библиотеку DLL смешанного режима, назовем ее "Клиент", чтобы заменить некоторые неуправляемые классы их управляемыми эквивалентами.На моем личном компьютере все работает нормально, но когда я проверяю исходный код, наша машина сборки не создает проект.Он не распознает управляемые классы, которые я использую из другой библиотеки DLL, называемой "Core".

Я думаю, проблема связана с предварительно скомпилированными заголовками.И вот почему:

Чтобы использовать классы из "Ядра", я добавил ссылку на "Основной" проект в "Клиентский" проект.Если я удалю эту ссылку, а затем создам проект на своем персональном компьютере, он все равно будет работать.Однако CLR PCH не перекомпилируется после удаления ссылки.Если я перекомпилирую CLR PCH, а затем скомпилирую проект, он завершится с теми же ошибками, которые я получаю на компьютере сборки:управляемые классы не распознаются.

Мне кажется, что управляемые классы из импортируемых вами DLL определены в предварительно скомпилированном заголовке.Я не смог это проверить, но это лучшее предположение, которое у меня есть.Есть ли у кого-нибудь какое-нибудь представление, которое они могут высказать по этому вопросу?Разрешаются ли ссылки на проекты в смешанных библиотеках DLL путем помещения перехватов в управляемый PCH?

Шаги по воспроизведению

Следующее не имеет для меня никакого смысла:

  1. Заставьте клиента выполнить сборку.
  2. Удалите ссылку с Клиента на Ядро.Скомпилируйте Клиент.Клиент ВСЕ ЕЩЕ строится.Этого никто не ожидал.
  3. Перекомпилируйте клиентский PCH, затем скомпилируйте Клиент.Сбой компиляции клиента:классы в "Ядре" не определены.Это ожидаемое поведение.
  4. Добавьте ссылку на Ядро, скомпилируйте.Компиляция клиента завершается с ошибкой по той же причине.Этого никто не ожидал
  5. Перекомпилируйте клиентский PCH, затем скомпилируйте Клиент.Клиент компилируется нормально.

Мой вывод из этого эксперимента заключается в том, что ссылки вставляются в проект через предварительно скомпилированные заголовки, и что что-то не так с тем, как это работает, по крайней мере, на нашей машине сборки.

Это было полезно?

Решение

Есть еще один способ добавить ссылки на библиотеку DLL с управляемым / смешанным режимом в C ++ / CLI - это добавить #using Core.dll в Client.Это может решить вашу проблему со сборкой.

Другие советы

Это не может так работать, не так ли, потому что вам не нужно использовать предварительно скомпилированный заголовок.
Все, что делает PCH, - это позволяет вам ускорить сборку.
Он не делает ничего особенного со ссылками.....

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top