2

Visual Studio 2012 を使用して Windows 8 ストア アプリを作成しています。メイン アプリは XAML/C# アプリですが、C++/CX を使用して作成された WinRT コンポーネントも使用しています。WinRT コンポーネントには、[新しいプロジェクト] ダイアログから「DLL (Windows ストア アプリ)」という VS プロジェクト テンプレートを使用しています。このプロジェクトを作成したら、単一の ref クラスを持つ単一の名前空間を含むように変更します。私の C# プロジェクトには、この C++ プロジェクトへの参照が含まれています。

ただし、アプリを実行しようとすると、C# コードは、C++ ref クラスをインスタンス化/アクティブ化しようとする時点で例外をスローします。MSDN のサンプルでも、これが実際に機能する例をいくつか見てきました。WinRT コンポーネント DLL と winmd ファイルが最終的なアプリ パッケージに正しくコピーされていること、およびアプリの AppxManifest.xml が WinRT クラスの正しい登録情報で適切に更新されていることを確認しました。ただし、それでも失敗します。

何が問題なのかわかりません。このエラーを修正するにはどうすればよいですか?

4

1 に答える 1

3

Windows ランタイム コンポーネントのバイナリには、次の 2 つのエクスポートが必要です。

VS プロジェクト テンプレート "DLL (Windows ストア アプリ)" を使用する場合、プロジェクトは、コンパイラが上記の 2 つのエクスポートをバイナリに配置するようにする必要なマクロを定義していません。プロジェクト設定の下で、マクロ セットが _WINDLL であることがわかります。これを _WINRT_DLL に変更する必要があります。

または、C++/CX を使用して WinRT コンポーネントを作成する正しい方法は、Visual C++ -> Windows Store の下にある「Windows ランタイム コンポーネント」という VS プロジェクト テンプレートを使用することです。これを使用すると、適切な WinRT バイナリを作成するために、適切なプロジェクト設定などで既に正しくセットアップされているプロジェクトが作成されます。

于 2012-12-28T06:51:44.740 に答える