2011-09-20 15 views
10

C#で消費できるC++ WinRTコンポーネントを作成できると言われています。私は単純なテストプロジェクト - C#XAMLアプリケーションと、基本的なWinRTコンポーネントプロジェクトテンプレートを使用するC++プロジェクトを持っています。 C#XAMLプロジェクトにプロジェクト参照を追加しようとすると、参照を追加できないというメッセージが表示されます(理由はわかりません)。ネイティブのWinRTコンポーネントをビルドすることができ、.winmdファイルが生成され、参照の追加ダイアログの参照ボタンを使用してこの.winmdファイルへの参照を手動で追加できます。これにより、ネイティブライブラリのメソッドにアクセスすることができますが、ビルドすると、Platform.IDisposableを使用していますが、その型は参照されていないアセンブリで定義されています。このシナリオをセッションで実演したことはありません。管理対象プロジェクトからネイティブWinRTコンポーネントを参照する方法はありますか。

答えて

8

答えを見つけました!まず、あなたはその後、手動で\ VC \にありますplatform.winmdへの参照を追加し、その後、あなたは参照を追加し、WinRTのコンポーネントのプロジェクトをきれいに、基本的に http://social.msdn.microsoft.com/Forums/en-US/winappswithnativecode/thread/1900bd21-8693-4127-800a-f35cfd5daac2

:それはグリッチだが、それは回避策を持っているように見えますあなたが行くのが良いはずです。

2

参照しているC++ WinRTアセンブリは、おそらくIDisposableインターフェイスを実装しているオブジェクトを使用しているため、インターフェイスを含むC++アセンブリも参照する必要があります。

+0

どのようなC++アセンブリですか?おそらく、WinRTのすべてのコアアセンブリは既に自動的に参照されています。選択する参照ダイアログに追加の標準アセンブリはありません。 –

+3

@Jeremy 'Platform.IDisposable'を解決するために、.NETアプリケーションに' Microsoft.VCLibs'への参照を追加する必要があるようです(副次的に、 'System.IDisposable '、しかしそれは起こらない...)。ただし、参照として追加すると、展開時に問題が発生するようです。おそらくDev Previewのプレビューです。 –

+0

ええ、私はMicrosoft.VCLibsに気づき、それを試しました、そして、それはそれが定義されているように見えますが、配備時にエラーが発生しています。パッケージングの内容を調べなければならないでしょう - おそらく、VCLibsはパッケージに含まれていなければなりませんか?誰でもこれを働かせることができますか? –

2

Microsoft.VCLibsへの参照を追加した後、同様の問題が発生しました。展開できませんでした。しかし、私は、デフォルトではWinRTコンポーネントはx86コードにコンパイルされていますが、C#MetroスタイルのアプリケーションはすべてのCPUを対象としていますが、これが私の場合の根本的な原因であることに気づきました。 C#アプリケーションをx86に切り替えると、問題は解決しました。

関連する問題