我正在使用包装 DirectX 的第三方 .dll d3d9.dll
,修改原始 .dll 的执行。Fraps 使用了此类设置的一个众所周知的示例。
我正在多头模式(D3DCREATE_ADAPTERGROUP_DEVICE)下创建一个全屏独占设备。
当从 .dll 调用特定函数时,我遇到了一个问题,即 .dll 包装器退出我的程序D3D9SetMode
。
这是 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_NOWINDOWCHANGES
创建设备但没有成功。
任何链接,信息,想法?