我正在使用第三方.dll包装DirectX d3d9.dll
,修改原始.dll的执行。 Fraps使用了这种类型设置的一个众所周知的例子。
我正在多头模式下创建一个全屏独占设备(D3DCREATE_ADAPTERGROUP_DEVICE)。
我遇到的问题是.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
但没有成功。
任何链接,信息,想法?