0

基本的にC++/CXを使用して作成したWindowsランタイムコンポーネントで構成される拡張SDKを作成しました。これを行ったのは、任意の言語(C ++、C#、またはJavaScript)でWindows8ストアアプリを構築する開発者がコンポーネントを利用できるようにするためです。

SDKはローカルマシンで正常に動作します。デバッグ構成とリリース構成の両方で、アプリをローカルでビルドして実行できます。ただし、リモートマシンでアプリをリモートデバッグしようとすると、SDKのコンポーネントを使用しようとするとアプリが失敗することに気付きます。奇妙なことに、この失敗は、アプリがデバッグモードで実行されている場合にのみ発生します。リリースモードでは、すべてが正常に機能します。

私は何が間違っているのですか?

4

1 に答える 1

1

Visual Studio 2012 の使用

わかったと思います。C++/CX WinRT コンポーネントの同じバイナリを、拡張 SDK の redist フォルダーの下の Debug フォルダーと Retail フォルダーの両方に含めました。

その結果、このバイナリは常に Visual Studio 2012 のリリース CRT に依存しています。

アプリのリリース バージョンをリモートで実行すると、アプリ バイナリと SDK コンポーネント バイナリの両方がリリース CRT に依存します。また、アプリはリリース VCLibs パッケージに依存しているため、リリース CRT もシステム上にあります。したがって、リリースアプリは正常に動作します。

ただし、アプリのデバッグ バージョンをリモートで実行すると、アプリは Visual Studio 2012 のデバッグ CRT に依存しますが、SDK コンポーネントはリリース CRT に依存します。アプリはデバッグ VCLibs パッケージのみに依存するため、実行時にデバッグ CRT のみを検出します。したがって、SDK コンポーネントの読み込みに失敗します。

解決策は、SDK を作成するときに、リリース バイナリがリリース CRT に依存し、デバッグ バイナリがデバッグ CRT に依存するようにすることです。

C++ ランタイムが Windows ストア アプリでどのように機能するかの詳細については、次のリンクを参照してください


Visual Studio 2013 で動作するようになったことを更新

Visual Studio 2013 の使用

Visual Studio 2013 では、VCLibs デバッグ AppX パッケージにデバッグ CRT DLL とリリース CRT DLL の両方が含まれています。したがって、デバッグ構成では、アプリはデバッグ CRT に依存し、拡張 SDK バイナリはリリース CRT に依存します。どちらの DLL も VCLibs Debug AppX パッケージに含まれています。それでうまくいきます。

于 2012-12-21T00:52:42.867 に答える