IDirectDrawSurface::GetSurfaceDesc access violation

Discussion in 'WASM.WIN32' started by Maveric, Apr 7, 2011.

  1. Maveric

    Maveric New Member

    Blog Posts:
    0
    Joined:
    Jan 19, 2004
    Messages:
    90
    В софте изпользуется DirectDraw. Работает на XP с любыми SP. При запуске на 7-ке выявились проблемы: если включить базовую тему(без стекла) и залочить станцию, после разлочки часто вылетает access violation в функции IDirectDrawSurface::GetSurfaceDesc(). Причем поверхность успешно создается.
    Code (Text):
    1. ...
    2. HRESULT hRes;
    3.  
    4. hRes = pDD->CreateSurface(&m_ddsd, &m_pSurface, NULL);
    5.  
    6. if(hRes != DD_OK)
    7.     return hRes;
    8.  
    9. hRes = m_pSurface->GetSurfaceDesc(&m_ddsd); // тут вылетает
    10. ...
    Пробовал на двух машинах. Везде видеокарта атишная.
     
  2. censored

    censored New Member

    Blog Posts:
    0
    Joined:
    Jul 5, 2005
    Messages:
    1,615
    Location:
    деревня "Анонимные Прокси"
    Возможно надо проверять потерю IsLost() и восстанавливать Restore() при необходимости.
     
  3. punxer

    punxer Андрей

    Blog Posts:
    0
    Joined:
    Oct 16, 2006
    Messages:
    1,327
    Location:
    Ржев
    Этот кусок кода не показателен. Ты в каждой итерации поверхность создаешь чтоле?
    Islost может помоч. Поможет %в 90.
     
  4. punxer

    punxer Андрей

    Blog Posts:
    0
    Joined:
    Oct 16, 2006
    Messages:
    1,327
    Location:
    Ржев
    Если не поможет, давай сюда цикл.
     
  5. Maveric

    Maveric New Member

    Blog Posts:
    0
    Joined:
    Jan 19, 2004
    Messages:
    90
    Это часть моей функции в которой происходит восстановление всех поверхностей. Она вызывается только в случае потерь.
    Была такая мысль. Этот код я поместил в блок try-except, поймал исключение и сделал проверку IsLost(). Нифига. Поверхность не потеряна. IMHO, в независимости от того потеряна поверхность или нет исключения быть не должно.

    Повторюсь, что все это происходит если
    .
     
  6. Booster

    Booster New Member

    Blog Posts:
    0
    Joined:
    Nov 26, 2004
    Messages:
    4,860
    HRESULT в студию.
     
  7. Maveric

    Maveric New Member

    Blog Posts:
    0
    Joined:
    Jan 19, 2004
    Messages:
    90
    от чего ? Если от CreateSurface(...), то DD_OK, а если от GetSurfaceDesc(...), то сам понимаешь... :)
     
  8. Booster

    Booster New Member

    Blog Posts:
    0
    Joined:
    Nov 26, 2004
    Messages:
    4,860
    DDERR_INVALIDOBJECT?
     
  9. Maveric

    Maveric New Member

    Blog Posts:
    0
    Joined:
    Jan 19, 2004
    Messages:
    90
    я в первом посте написал, что она вылетает, т.е. не возвращает она значение, т.к. до этого момента внутри вызова этой функции выбрасывается исключение.
     
  10. Booster

    Booster New Member

    Blog Posts:
    0
    Joined:
    Nov 26, 2004
    Messages:
    4,860
    Maveric
    Не должно, но может. Скорее всего драйвера. Надеюсь с m_ddsd в момент вылета всё ok?
     
  11. Maveric

    Maveric New Member

    Blog Posts:
    0
    Joined:
    Jan 19, 2004
    Messages:
    90
    да... с ней все путем