C # — не удалось добавить ссылку на проект WinRT C ++ DLL

СЦЕНАРИЙ:

Я делаю [Edit: native WinRT] C ++ Direct X DLL проект для приложений Магазина Windows, основанный на примере кода Visual Studio «Direct3D App».

Это должен быть отдельный проект DLL от моего проекта в Магазине Windows, потому что я буду использовать свой XAML UserControl с визуализатором Direct X внутри него как в приложении Windows 8 Metro, так и в версии приложения для Windows Phone.

ЭТА ПРОБЛЕМА:

Я не могу сослаться на проект C ++ в проекте приложения C # Windows Store. Visual Studio отказывается со следующими словами:

A reference to <project-name> could not be added.

Я видел предложения по компиляции проекта C ++ с использованием флага / clr, но это несовместимо с:

  • флаг / ZW требуется некоторым API в проекте
  • заголовок «wrl.h»
  • множество других флагов командной строки в настройках проекта

Таким образом, флаг / clr не представляется возможным в этой ситуации.

ВОПРОС:

Как я могу сослаться на проект C ++, чтобы я мог использовать мой XAML Direct X рендерер в проекте C # Windows Store App? Или есть лучшая альтернатива?

Заранее спасибо.

6

Решение

Я решил проблему, заново создав проект C ++ как Windows Runtime Component проект. Я изначально создал проект из Class Library (Windows Store apps) шаблон. Должно быть, шаблон Win RT имеет некоторые параметры конфигурации, которые позволяют ему работать.

После внесения этого изменения проект можно добавить в качестве ссылки в проект C #.

Именно из-за ответа @ user1610015 я понял, что на самом деле разрабатываю собственный код Win RT, а не управляемый код, что побудило меня попробовать это решение — спасибо!

6

Другие решения

/ ZW флаг для проектов C ++ / CX. C ++ / CX по синтаксису практически идентичен управляемому C ++ (C ++ / CLI), за исключением того, что C ++ / CX полностью неуправляем. Возможно, именно это заставило вас думать, что вы разрабатываете управляемый C ++, хотя на самом деле это не так.

Я не использовал C ++ / CX, но, как я слышал, классы среды выполнения Windows являются классами COM. Поэтому я думаю, что вы можете использовать Tlbimp.exe инструмент из Windows SDK для создания управляемой библиотеки DLL из вашей неуправляемой библиотеки DLL, на которую затем можно ссылаться из проекта C #. Попробуйте и дайте мне знать, если это работает.

Другой вариант — поговорить с Windows Runtime без C ++ / CX. Хотя C ++ / CX значительно облегчает программирование среды выполнения Windows, в этом нет особой необходимости. Вы также можете использовать библиотеку WRL. Поскольку библиотека WRL является чистым C ++, ее также можно использовать из C ++ / CLI.

4

По вопросам рекламы [email protected]