我正在维护一个旧应用程序,除其他外,它在屏幕上显示微小的视频源。该应用程序工作正常,除非您在通过 RDP 查看桌面时运行它。
IDirectDrawSurface7
当我们通过Lock
函数获取写指针时:
DDSURFACEDESC2 dsd;
ZeroMemory(&dsd, sizeof(dsd));
dsd.dwSize = sizeof(dsd);
hr = m_pSurface->Lock(NULL, &dsd, DDLOCK_NOSYSLOCK|DDLOCK_WRITEONLY/*|DDLOCK_DONOTWAIT*/, NULL);
除非您通过 RDP 连接到系统,否则一切正常。在这种情况下,锁定失败,HRESULT
of DDERR_WASSTILLDRAWING
。
MSDN 页面上的注释指出,只有在“默认条件”下,使用该标志时才会发生此错误DDLOCK_DONOTWAIT
,我已将其诊断注释掉。
是否有希望在不进行重大重新设计的情况下让该应用程序在 RDP 8 / Windows 7 上运行?
打开应用程序并连接新的 RDP 会话以及通过现有 RDP 会话启动应用程序都会导致此行为。