1

開発中のAPIiveでD3D11呼び出しをラップしようとしています。

C#で使用しようとしているC ++/CXコンポーネントライブラリを作成しました。C ++ / CXコンポーネントとC#プロジェクトが同じソリューションに含まれている場合、これは単純で簡単です。すべてが正常に機能します...

...しかし、独自のソリューションでC ++ / CX APIコンポーネントを作成する場合は、2番目のC#Metroアプリソリューションを作成し、それにC ++ / CXコンポーネント「プロジェクト」を追加してから、C#MetroアプリにC ++/CXコンポーネントを参照させます。プロジェクトC++で宣言されたパブリック列挙を使用しようとすると、ランタイムエラーが発生します。

これが私のC#アプリがリンクできないように見えるパブリック列挙型クラスエラーです。

「Windowsランタイムタイプ'Reign.Video.D3D11.FeatureLevels'が見つかりませんでした。」

テスト用のC#アプリでC ++ / CXの「API」を正しくリンクできないように見えるので、これは非常に苛立たしいことです。メトロでC++で作成されたAPIをどのように生産的にテストすると思いますか?同じソリューションがない限り、C ++ / CXコンポーネントをC#プロジェクトにリンクすることはできません。また、C ++ / CXプロジェクトをC#ソリューションにリンクしてそこからリンクしようとすると、ランタイムエラーが発生します...

編集:これが私の問題を示すデモのダウンロードリンクです: ダウンロード

4

1 に答える 1

4

Windows ランタイムでは、すべての型が含まれている .winmd ファイルの名前と一致する名前空間で見つかる必要があります。リンクしたデモでは、生成された winmd に名前ExternalWindowsRuntimeComponentProject.winmdが付けられていますが、非稼働クラスはReign.Video.D3D11名前空間で見つかりました。これは WinRT では許可されておらず、.NET 型ローダーは関連付けられた名前空間にない型を見つけることができません。

ここでの解決策は、 enum が、、またはFeatureLevelsのいずれかという名前の winmd にあることを確認することです。Reign.winmdReign.Video.winmdReign.Video.D3D11.winmd

于 2012-08-07T20:25:53.010 に答える