C++ 防止';d3d9.dll';功能';D3D9SetMode';呼叫';更改显示设置sexa';

C++ 防止';d3d9.dll';功能';D3D9SetMode';呼叫';更改显示设置sexa';,c++,directx,message-pump,C++,Directx,Message Pump,我正在使用一个第三方.dll,它围绕DirectXd3d9.dll,修改原始.dll的执行。FRAP使用了这种设置的一个众所周知的示例 我正在以多头模式创建全屏专用设备(D3DCREATE_ADAPTERGROUP_设备) 我遇到了一个问题,当从D3D9SetMode调用特定函数时,.dll包装器退出我的程序 以下是WinDbg在调用ChangeDisplaySettingsExA函数时中断生成的部分调用堆栈: 0018e748 7024712d USER32!ChangeDisplaySett

我正在使用一个第三方.dll,它围绕DirectX
d3d9.dll
,修改原始.dll的执行。FRAP使用了这种设置的一个众所周知的示例

我正在以多头模式创建全屏专用设备(D3DCREATE_ADAPTERGROUP_设备)

我遇到了一个问题,当从
D3D9SetMode
调用特定函数时,.dll包装器退出我的程序

以下是WinDbg在调用
ChangeDisplaySettingsExA
函数时中断生成的部分调用堆栈:

0018e748 7024712d USER32!ChangeDisplaySettingsExA
0018e828 7024702e d3d9!D3D9SetMode+0xec
0018e858 70246fab d3d9!DdSetModeLH+0x83
0018e954 7024760b d3d9!CSwapChain::SetSwapChainDisplayMode+0x5ca
0018e9a4 702492b0 d3d9!CSwapChain::DoneExclusiveMode+0xc7
0018e9c8 702491fc d3d9!CEnum::DoneExclusiveMode+0x5d
0018ea18 7024904a d3d9!handleActivateApp+0x12f
0018ea40 763862fa d3d9!WindowProc+0x30f
...
我已经计算出
WM_ACTIVATE
是发生这种情况之前要处理的最后一条消息

我曾经尝试过针对DirectX9 2005年2月和2007年SDK(分别是d3dx9_24.dll和d3dx9_32.dll)进行构建—它们都有相同的问题

我怀疑有一个标志或设置方案阻止调用
ChangeDisplaySettingsExA
。我曾尝试过在设备创建过程中进行
D3DCREATE\u now更改
,但没有成功


任何链接、信息、想法?

由于使用全屏独占模式时,您告诉Direct3D将视频模式从GDI兼容的非独占视频模式更改为Direct3D优化的独占模式,因此调用
ChangeDisplaySettingsEx
是不可避免的。你要么停止使用全屏独占模式(例如,改用全屏窗口模式),要么要求第三方开发人员修复他们的DLL。我们的引擎是在全屏窗口模式下启动的,这给了我们的应用程序一个可行的(如果不是完全可以接受的)帧速率。我将把我的优化集中在其他地方。谢谢你的理智检查@RossRidge