0

我正在使用包装 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.dlld3dx9_32.dll分别)进行构建——它们都有同样的问题。

我怀疑有一个标志或设置方案来阻止调用ChangeDisplaySettingsExA. 我尝试过D3DCREATE_NOWINDOWCHANGES创建设备但没有成功。

任何链接,信息,想法?

4

0 回答 0