2012-12-25 79 views
6

場景:無法對WinRT的C++ DLL項目中添加引用

我想提出一個[編輯:原生的WinRT]基於 「Direct3D的應用程序」 Visual Studio代碼C++ Direct X的DLL項目的Windows Store應用程序樣品。

這必須是我的Windows應用商店應用項目中的一個單獨的DLL項目,因爲我將在Windows 8 Metro應用和Windows Phone版本的應用中使用帶有Direct X渲染器的XAML UserControl。

問題:

我不能引用在C#的Windows商店應用項目的C++項目。 Visual Studio中下面的話拒絕:

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

我見過的建議,編譯使用/ CLR標誌的C++項目,但這不兼容:

  • 的所要求/ ZW標誌項目
  • 的「wrl.h」頭
  • 的其他命令行標誌在項目設置的大量內的一些API

所以在這種情況下/ clr標誌看起來不是一個選項。

問題:

我如何引用C++項目,這樣我可以在C#中的Windows Store應用項目中使用我的XAML的Direct X渲染?還是有更好的選擇?

在此先感謝。

回答

6

我解決了這個問題,重新創建了C++項目作爲Windows Runtime Component項目。我原先從Class Library (Windows Store apps)模板創建了該項目。一定是Win RT模板有一些配置設置使它能夠工作。

進行此更改後,該項目可以添加爲C#項目中的參考。

這是因爲@ user1610015的回答,我意識到我實際上正在開發原生Win RT代碼,而不是託管代碼,這導致我嘗試此解決方案 - 謝謝!

4

/ZW標誌用於C++/CX項目。 C++/CX在語法上與託管C++(C++/CLI)幾乎完全相同,只是C++/CX完全不受管理。這可能是你認爲你正在開發託管C++的原因,事實上你並不是。

我沒有使用C++/CX,但從我聽說的Windows運行時類是COM類。所以我認爲您可以使用Windows SDK中的TlbImp.exe工具從您的非託管DLL創建託管DLL,然後您可以從C#項目中引用該託管DLL。試試吧,讓我知道它是否有效。

另一種選擇是與沒有C++/CX的Windows Runtime對話。雖然C++/CX使Windows運行時編程變得更容易,但並不是絕對必要的。您也可以使用WRL庫。由於WRL庫是純粹的C++,它也應該可以在C++/CLI中使用。

+0

感謝您的信息 - 我不知道我沒有開發非託管代碼。我沒有最終需要嘗試Tlbimp.exe - 請參閱上面的答案。 – Brett

+0

@佈雷特什麼都不說謝謝你比upvote更好... – thumbmunkeys

+0

@pivotnig權利,完成:) – Brett

相關問題