7

シナリオ:

「Direct3D アプリ」Visual Studio コード サンプルに基づいて、Windows ストア アプリ用の [編集: ネイティブ WinRT] C++ Direct X DLL プロジェクトを作成しています。

これは、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++ プロジェクトをコンパイルするという提案を見てきましたが、これは次のものと互換性がありません。

  • プロジェクト内の一部の API で必要な /ZW フラグ
  • 「wrl.h」ヘッダー
  • プロジェクト設定の他の多数のコマンドライン フラグ

そのため、この状況では /clr フラグはオプションではないようです。

質問:

C# Windows ストア アプリ プロジェクト内で XAML Direct X レンダラーを使用できるように、C++ プロジェクトを参照するにはどうすればよいですか? または、より良い代替手段はありますか?

前もって感謝します。

4

2 に答える 2

7

C++ プロジェクトをプロジェクトとして再作成することで問題を解決しましたWindows Runtime Component。私はもともとClass Library (Windows Store apps)テンプレートからプロジェクトを作成していました。Win RT テンプレートには、それを機能させるための構成設定が含まれている必要があります。

この変更を行った後、プロジェクトを C# プロジェクトの参照として追加できます。

@ user1610015 の回答のおかげで、実際にマネージド コードではなくネイティブの Win RT コードを開発していることに気づき、このソリューションを試すようになりました - ありがとう!

于 2012-12-28T10:36:13.293 に答える
4

/ZWフラグは、C++/CX プロジェクト用です。C++/CX はマネージド C++ (C++/CLI) と構文がほぼ同じですが、C++/CX は完全にアンマネージドです。これが、マネージ C++ を開発していると思っていたのに、実際にはそうでなかったのかもしれません。

私は C++/CX を使用したことがありませんが、聞いたところによると、Windows ランタイム クラスは COM クラスです。したがって、Windows SDK のTlbImp.exeツールを使用して、アンマネージド DLL からマネージド DLL を作成し、それを C# プロジェクトから参照できると思います。試してみて、うまくいくかどうか教えてください。

もう 1 つのオプションは、C++/CX を使用せずに Windows ランタイムと対話することです。C++/CX を使用すると Windows ランタイム プログラミングがはるかに簡単になりますが、厳密に必要というわけではありません。WRL ライブラリを使用することもできます。WRL ライブラリは純粋な C++ であるため、C++/CLI からも使用できるはずです。

于 2012-12-25T09:40:00.730 に答える