2

理由はわかりませんが、今日 myOpenID が機能していないようです。とにかく ... この問題があります。既存の C# プロジェクトに組み込む必要があるアンマネージ C++ ライブラリ (DLL) があります。今...ライブラリを呼び出すマネージドC++でミニラッパー(DLL)を作成したので、C#コードからロードできるようになりました。コマンドラインC#プロジェクトから試してみると、完全に機能します。結果、正しい行動など。

これを実際のプロジェクトにロードすると、ミニ ラッパー DLL から奇妙な System.AccessViolationException が発生し始めます。私は C# の経験も、Windows での一般的なマネージド/アンマネージド C++ 開発の経験もありません。なぜこれが C# プロジェクトから機能し、別のプロジェクトからは機能しないのか理解できません。

詳細情報: 元のライブラリは OGRE3D レンダリング エンジンを使用して計算を行い、このライブラリを使用する必要があるプロジェクトは内部で OGRE を使用していますが、これにより問題が発生する可能性はありますか?

助言がありますか?

4

1 に答える 1

1

ここにあなたが試すためのいくつかのアイデアがあります...

  1. 何が起こっているのかを正確に知ることは困難ですが、私が最初にやろうとすることは、このマネージド c++ dll をミックスから削除することです。紛らわしい内容かもしれません。ここのどこかで、管理された世界と管理されていない世界の間でデータが正しくマーシャリングされていないように感じます。また、コンソールからクラッシュしないからといって、必ずしもコードが正しく機能しているとは限りません。アクセス違反をトリガーする方法ではなく、コードが壊れている可能性があります。最初に確認することは、p/invoke を使用してアンマネージ dll を直接呼び出すことです。それが壊れた場合は、すぐにわかるはずです。

    P/Invoke を使用して C# で Win32 DLL を呼び出す

  2. ミックスのどこかで、このポインターが意味をなさない別のアドレス空間に移動されている可能性があります。ここにプロセス境界はありますか?

于 2010-04-12T21:17:15.000 に答える