2009-07-28 9 views
1

(私は今のユーザーとしてサインアップしているので、このメッセージを再掲載しています)問題II

私だけインストールされているVisual Studioの6(SP5) Vista Enterpriseマシン上で実行します。いくつかの問題がありましたが、それは問題ないと思います。

問題は私のVC++ 6アプリケーションがActiveXをホストしようとすると失敗することです。私はそれをコンパイルすることができましたが、Vistaからのrc.exeに関する警告メッセージ(「このプログラムには互換性に関する既知の問題があります」)があります。

私はそれをデバッグしましたが、CAxDialogImplから派生したクラスがCreate()メソッドで失敗することがわかりました。同じアプリケーションがXP上で正常に動作しました!

既知の互換性の問題はありますか?

テクニカルインフォメーション:CAxDialogImpl :: Create()(ここでNULLを渡す)がAtlAxCreateDialogAを呼び出し、これが一般的な例外をスローするCreateDialogIndirectParamAを呼び出します。

どうもありがとう、エリック

PS - 1.私は私のマシン上で管理しています。 OSは32ビットです。 2.私はVS6がVistaではサポートされていないことを知っていますが、VS 2008に移行しようとすると問題に遭遇したので選択肢がありませんでした。

+0

更新: 私のDLLが(私の視覚的なC++アプリケーションが実際にDLLです)、COMアプリケーションによって呼び出されますそれは動作しますが、.Netアプリケーションによって呼び出されると失敗します。 –

答えて

2

OK。 理由と解決策を見つけました。

これはDEPとの互換性の問題のようです。 アプリケーションが失敗して以来、例外/メッセージが表示されていないので、見つけにくいです。

問題は、my dllで使用されていた古いATLコンポーネントが原因です。 ATLの古いバージョンでは、実行時にマシンコードが生成され、実行可能とマークされていないメモリページからこのコードを実行しようとするため、ハードウェア強制DEPが有効な場合にDEP違反が発生します。

私のXPマシンとVistaマシンの違いは、実際にはDEP操作にありました。このVistaのDEPはハードウェアベースであり、問​​題を引き起こしました。

また、同じdllを使用していて、正常に動作しているCOMアプリケーションがありましたが、DEP互換性フラグを使用して作成されたため、.Netアプリケーションが失敗していました。

解決方法は、.NetアプリケーションからDEP互換性フラグを削除することでした。

乾杯、 エリック

PS - 2つのリンクが非常に有用だった: http://support.microsoft.com/kb/948468 How to make my program DEP-compatible?

関連する問題