8

Windows Phone 8 プロジェクトと、C++ で記述された別のプロジェクトがあります。どちらも同じソリューションにあります。C++ プロジェクトは、WP8 プロジェクトで使用される動的ライブラリであり、ファイルの上に Windows メタダ ファイル ( .winmd)を生成するように構成されてい.dllます。

C++ プロジェクトを WP8 プロジェクトのプロジェクト参照として追加すると、すべてが完全に機能します。

ただし、プロジェクトではなくバイナリを直接参照したいので、.dllそれ自体を参照しようとしましたが、VS2012では許可されませんでした(ライブラリは私が理解していることから管理されていないため、完全に理解しています)。代わりにファイルを追加すると機能します。つまり、.winmd警告/エラーなしでコンパイルされます。しかし、実行時にクラッシュします ( TargetInvocationExceptionC++ ライブラリの「実際の」コードが見つからないために発生する a を取得します)。

ファイルを追加するとき、ファイルがその隣にあることを.winmd確認しました。.dll両方のファイルをbinWP8 プロジェクトのディレクトリに配置しても機能しません。

インターネット上で手がかりを見つけることができません。何かヒントをいただければ幸いです。どんなヒントでも大歓迎です!

これは、私が設定しようとしている簡単なアーキテクチャのスキーマです。

建築

そして、発生した例外のスタックトレースは次のとおりです。

at System.StubHelpers.StubHelpers.GetWinRTFactoryObject(IntPtr pCPCMD)
   at Sqlite.Sqlite3.sqlite3_open_v2(String filename, Database& db, Int32 flags, String zVfs)
   at SQLite.SQLite3.Open(String filename, Database& db, Int32 flags, IntPtr zVfs)
   at SQLite.SQLiteConnection..ctor(String databasePath, SQLiteOpenFlags openFlags, Boolean storeDateTimeAsTicks)
   at SQLite.SQLiteConnection..ctor(String databasePath, Boolean storeDateTimeAsTicks)
   at WP8ClassLibrary.SomeManager..ctor(String databasePath)
   at WP8App.SomeViewModel..ctor()
   at WP8App.MainPage..ctor()
4

3 に答える 3

1

ツール + オプション、プロジェクトとソリューション、ビルドと実行。[MSBuild プロジェクト ビルド出力の詳細度] 設定を [標準] に変更します。

ビルド出力、「XapPackager」の後に表示されるメッセージに注意してください。Xap パッケージに追加されるファイルを示します。DLL がそのリストに含まれている必要があります。そうでない場合、プログラムは説明どおりに失敗します。その場合、スキップされる理由を見つける必要があります。まず、.winmd 参照の Copy Local プロパティが True であることを確認します。

于 2013-07-19T13:53:16.130 に答える
1

私は自分の経験を答えに加えたかっただけです..

C++ ライブラリを C# コードに直接追加しようとしている場合 (私の場合は Windows Phone 8.1 アプリ用)、.winmd ファイルを含めるとコンパイルは有効になりますが、起動時にアプリがクラッシュします。スタック トレースは、C++ dll の読み込みに失敗したことのみを示しています。

C# アプリケーションに Visual Studio C++ ランタイム ライブラリへの参照も追加する必要がありました。動作中の .xap (C# と C++ プロジェクトの両方を含むソリューションから作成された) と動作していない .xap (C# プロジェクトのみを含むソリューションから作成され、C++ .winmd ファイルへの参照) を比較することで、欠落している参照を見つけました。

于 2016-02-12T06:13:04.477 に答える
0

さて、私はそれを機能させることができました。元の投稿のスタック トレースが示唆するように、私は自分のアプリケーションで SQLite を使用しています。C++ プロジェクトの代わりにファイルを参照として追加すると、winmdいくつかの依存関係が満たされていないように見えます。

SQLite for Windows Phoneしたがって、参照をWP8ClassLibraryプロジェクトに追加する必要がありました。この C++ プロジェクトはおそらくそれ自体でこの依存関係を持っていたため、これは私のばかげた間違いでした(いくつかの参照がありますが、名前がわかりにくいため、winmdそれらが の一部であるとは推測できませんでした)。SQLite for Windows Phone

于 2013-07-19T15:15:26.803 に答える