2012-12-25 21 views
6

scenariusz:Nie można dodać odwołanie do WinRT C++ projektu DLL

Robię [Edycja: rodzimy WinRT] Projekt C++ Direct X DLL systemu Windows Store aplikacji opiera się na "Direct3D App" kodu Visual Studio próba.

To musi być oddzielny projekt DLL z mojego projektu aplikacji Windows Store, ponieważ będę używał mojego XAML UserControl z rendererem Direct X wewnątrz zarówno w aplikacji Windows 8 Metro, jak i wersji Windows Phone aplikacji.

PROBLEM:

nie może odwoływać się do projektu C++ w App projektu C# Windows Store. Visual Studio odmawia z następującymi słowami:

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

widziałem propozycje skompilować projekt C++ przy użyciu flagi/CLR, ale to nie jest kompatybilna z:

  • flagi/ZW wymaganej przez niektóre API w ramach projektu
  • z „wrl.h” nagłówka
  • mnóstwo innych flagi linii poleceń w ustawieniach projektu

Tak więc flaga/clr nie wydaje się być opcją w tej sytuacji.

na pytanie:

Jak mogę odwoływać się do projektu C++, dzięki czemu można używać mojego XAML Direct X renderujący w ramach projektu C# Windows App Store? Czy istnieje lepsza alternatywa?

Z góry dziękuję.

Odpowiedz

6

Rozwiązałem problem poprzez ponowne utworzenie projektu C++ jako projektu Windows Runtime Component. Pierwotnie stworzyłem projekt z szablonu Class Library (Windows Store apps). Musi być tak, że szablon Win RT ma pewne ustawienia konfiguracyjne, które umożliwiają jego działanie.

Po wprowadzeniu tej zmiany projekt można dodać jako odniesienie w projekcie C#.

To z powodu odpowiedzi @ user1610015 zdałem sobie sprawę, że faktycznie opracowałem natywny kod Win RT, a nie zarządzany kod, który doprowadził mnie do wypróbowania tego rozwiązania - dziękuję!

4

Flaga /ZW jest przeznaczona do projektów C++/CX. C++/CX jest prawie identyczna pod względem składni do zarządzanego C++ (C++/CLI), z tym wyjątkiem, że C++/CX jest całkowicie niezarządzany. Być może właśnie to spowodowało, że myślałeś, że rozwijasz zarządzane C++, podczas gdy w rzeczywistości nie byłeś.

Nie użyłem C++/CX, ale z tego, co słyszałem, klasy środowiska wykonawczego Windows są klasami COM. Więc myślę, że możesz użyć narzędzia TlbImp.exe z zestawu Windows SDK, aby utworzyć zarządzaną bibliotekę DLL z niezarządzanej biblioteki DLL, którą możesz następnie odwołać z projektu C#. Wypróbuj i daj mi znać, jeśli to działa.

Inną opcją jest rozmowa z Windows Runtime bez C++/CX. Podczas gdy C++/CX znacznie ułatwia programowanie środowiska wykonawczego Windows, nie jest to konieczne. Możesz także użyć biblioteki WRL. Ponieważ biblioteka WRL jest czystym C++, powinna być również użyteczna z C++/CLI.

+0

Dziękuję za te informacje - nie miałem pojęcia, że ​​nie rozwijam niezarządzanego kodu. Nie potrzebowałem wypróbować Tlbimp.exe - zobacz moją odpowiedź powyżej. – Brett

+0

@Brett nic nie mówi, dziękuję lepiej niż przegłosowanie ... – thumbmunkeys

+0

@pivotnig w prawo, gotowe :) – Brett

Powiązane problemy