Я использую сторонний .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 и 2007 SDK (d3dx9_24.dll
а также d3dx9_32.dll
соответственно) — у них обоих одинаковые проблемы.
Я подозреваю, что есть флаг или сценарий настройки, чтобы предотвратить вызов ChangeDisplaySettingsExA
, я пытался D3DCREATE_NOWINDOWCHANGES
на создание устройства без какого-либо успеха.
Любые ссылки, информация, идеи?
Задача ещё не решена.