IDirectDrawSurface::GetSurfaceDesc access violation

Тема в разделе "WASM.WIN32", создана пользователем Maveric, 7 апр 2011.

  1. Maveric

    Maveric New Member

    Публикаций:
    0
    Регистрация:
    19 янв 2004
    Сообщения:
    90
    В софте изпользуется DirectDraw. Работает на XP с любыми SP. При запуске на 7-ке выявились проблемы: если включить базовую тему(без стекла) и залочить станцию, после разлочки часто вылетает access violation в функции IDirectDrawSurface::GetSurfaceDesc(). Причем поверхность успешно создается.
    Код (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

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    Возможно надо проверять потерю IsLost() и восстанавливать Restore() при необходимости.
     
  3. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    Этот кусок кода не показателен. Ты в каждой итерации поверхность создаешь чтоле?
    Islost может помоч. Поможет %в 90.
     
  4. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    Если не поможет, давай сюда цикл.
     
  5. Maveric

    Maveric New Member

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

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

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    HRESULT в студию.
     
  7. Maveric

    Maveric New Member

    Публикаций:
    0
    Регистрация:
    19 янв 2004
    Сообщения:
    90
    от чего ? Если от CreateSurface(...), то DD_OK, а если от GetSurfaceDesc(...), то сам понимаешь... :)
     
  8. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    DDERR_INVALIDOBJECT?
     
  9. Maveric

    Maveric New Member

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

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Maveric
    Не должно, но может. Скорее всего драйвера. Надеюсь с m_ddsd в момент вылета всё ok?
     
  11. Maveric

    Maveric New Member

    Публикаций:
    0
    Регистрация:
    19 янв 2004
    Сообщения:
    90
    да... с ней все путем