Visual c++ ATL与DEP的不兼容是否可以修复?

Visual c++ ATL与DEP的不兼容是否可以修复?,visual-c++,atl,dep,thunk,Visual C++,Atl,Dep,Thunk,ATL使用thunks管理windows回调,显然它需要允许数据执行 : 请注意,系统DEP策略可以覆盖,无论属性如何,使用DEPAlwaysOn将禁用ATL thunk仿真 我将这句话翻译成(或多或少)“ATL应用程序可能因系统策略而崩溃”是否正确 有没有办法使ATL-8.0之前的应用程序在任何系统上正常工作,同时仍希望为thunk以外的所有系统启用DEP?ATL 8.0没有问题: 如有可能,将旧部件更换为可支持的部件 “无执行兼容性”,例如那些使用ATL 8.0或更新版本的。 ATL thu

ATL使用thunks管理windows回调,显然它需要允许数据执行

:

请注意,系统DEP策略可以覆盖,无论属性如何,使用DEP
AlwaysOn
将禁用ATL thunk仿真

我将这句话翻译成(或多或少)“ATL应用程序可能因系统策略而崩溃”是否正确


有没有办法使ATL-8.0之前的应用程序在任何系统上正常工作,同时仍希望为thunk以外的所有系统启用DEP?

ATL 8.0没有问题:

如有可能,将旧部件更换为可支持的部件 “无执行兼容性”,例如那些使用ATL 8.0或更新版本的。 ATL thunk策略是为了方便查找和 避免将线程本地存储用于对象映射的窗口句柄, 但DEP-aware操作系统中所需的thunk仿真否定甚至否定了这一点 逆转任何性能改进。较新版本的ATL没有 需要thunk仿真,因为它们的thunk是在中创建的 可执行数据块


编辑:抱歉,没有注意到您询问了8.0之前的ATL。

每个进程都启用了DEP,因此您不能仅对错误片段禁用DEP。选项是使用固定的ATL重建二进制文件以使二进制文件DEP兼容,或者在使用二进制文件的整个过程中禁用DEP

早期的ATL版本确实存在这个问题,并且在某个时候得到了修复


“我的电脑”、“高级”选项卡、“性能设置”、“数据执行预防”下有DEP例外情况。

如果您迫切需要使用较旧的ATL并在您无法控制的任意系统上运行,那么您可能运气不佳。