2017-07-18 21 views
0

これを数週間試してみます... D3DプロキシDLLをplattformツールセットVS2013(vs120)以下でコンパイルするたびにアクセス違反が発生します(0xC0000005)をこのライブラリを使用するD3D9アプリケーションで使用します。 VS2015またはVS2017に変更した場合、例外は発生しません。vC++コンパイラのバージョンがVS2015未満でコンパイルされた場合のアクセス違反

私のdllには、DirectX 9インターフェイスIDirect3D9とIDirect3DDevice9(rawプロキシdllとして機能する)の再実装のみが含まれています。

VS2013を使用したい理由は、クローズドソースD3D9アプリケーションがVS2013を使用してコンパイルされていることです。私が正しく異なるVSランタイムを使用して理解していると、しばしば正しく動作しません。なぜなら、D3D9メソッドへのすべての呼び出しをファイルに記録しようとすると、ランタイムエラーが発生するからです。

私はWindows 8.1 Proを途中で使っています。

何か助けてください!

+0

* VS2015またはVS2017に変更した場合、例外は発生しません。* - アプリケーションのデバッグを開始する(またはデバッグする方法を学習する)ときに、例外の原因となっている関数、行などを確認します。アクセス違反は、さまざまな理由で発生する可能性があります.1つは、異なるコンパイラによって明らかにされたコードのバグです。 – PaulMcKenzie

+0

明らかに私は十分に明確ではなかった。 _私がVS2013を使用したい理由は、私のクローズドソースD3D9アプリケーションがVS2013.を使用してコンパイルされているということです。これは私がD3D9呼び出しを傍受しようとしているクローズドソースアプリケーションを意味していました。例外がスローされる部分のソースコードはありません。 – Apollo13

答えて

0

私の知る限り(/MTまたは/MTdでビルドしていない、すなわち、動的にリンクされたランタイムを使用するように、(それは、デバッグやリリースバージョンであるかに応じて)あなたのDLLは、理想的に/LDまたは/LDdでコンパイルされていることを確認してくださいまたは少なくとも/MDまたは/MDdください少なくともデフォルトでは/MT[d]ですが、現在のところデフォルトのDLL設定についてはわかりません)。

また

、アプリケーションが予期するものと呼び出し規則に応じて、あなたはデフォルトの呼び出し規約を変更して再生しようとすることができます:/Gz(STDCALL)、/Gr(fastcall)、/Gd(CDECL)。しばしばstdcallはライブラリによって期待されていますが、MSVCのデフォルトはAFAIK cdeclなので、それも問題の原因になるかもしれません。

+0

私が仕事に戻ったときにそれを確認します。 私は事前に尋ねます:私が変更する唯一のものは、プラットフォームツールセット、それ以外は何もありません。/MTと/ MTdはv140/v141では動作しますが、v120では動作しない可能性はありますか?はいの場合は、なぜですか?ありがとう。 – Apollo13

+0

設定を確認しました -/LDと/ LDdは利用できませんが、/ MDが設定されています。 – Apollo13

関連する問題