2

ATL はサンクを使用してウィンドウのコールバックを管理しますが、データの実行を許可する必要があるようです。

マイクロソフトは次のように述べています

システム DEP ポリシーは上書きできることに注意してください。DEPAlwaysOnを使用すると、属性に関係なく、ATL サンク エミュレーションが無効になります。

この引用を (多かれ少なかれ) 「システム ポリシーが原因で ATL アプリケーションがクラッシュする可能性がある」に翻訳するのは正しいですか?

ATL-8.0 より前のアプリケーションを任意のシステムで正しく動作させる方法はありますか?

4

2 に答える 2

2

DEPはプロセスごとに有効になるため、バグのあるフラグメントに対してのみDEPを無効にすることはできません。オプションは、固定ATLを使用してバイナリを再構築してバイナリDEP互換にするか、バイナリが使用されるプロセス全体でDEPを無効にすることです。

以前のATLバージョンには確かにこの問題があり、ある時点で修正されました。

DEP例外は、[マイコンピュータ]、[詳細設定]タブ、[パフォーマンス設定]、[データ実行防止]の下にあります。

于 2011-09-17T18:31:36.277 に答える
0

ATL 8.0 では問題ありません。

可能であれば、古いコンポーネントを、ATL 8.0 以降を使用するコンポーネントなど、"No eXecute Compatibility" をサポートするように構築されたコンポーネントに置き換えます。ATL サンク戦略は、ルックアップの利便性と、ウィンドウ ハンドルからオブジェクトへのマップにスレッド ローカル ストレージを使用しないようにするために考案されましたが、DEP 対応 OS で必要なサンク エミュレーションは、パフォーマンスの向上を無効にし、さらには元に戻します。新しいバージョンの ATL では、サンクが実行可能データ ブロックに作成されるため、サンク エミュレーションは必要ありません。

編集: 申し訳ありませんが、8.0 より前の ATL について質問されたことに気づきませんでした。

于 2011-09-17T04:36:18.950 に答える