Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.06.2011, 22:29   #1
Misfit Kid
Новичок
Джуниор
 
Регистрация: 20.06.2011
Сообщений: 4
Злость DirectDraw: программа вылетает!

Поиском воспользовался, похожей темы не нашел...
У меня такая проблема: написал пробную программу с применением DirectDraw, компилятор ошибок не обнаружил, все ок, но только я жму execute (ctrl+F5), как вываливается характерное сообщение типа "probe.exe вызвало ошибку и будет закрыто... бла-бла... отчет..." ну и прочая... Так я этот свой дурацкий код уже со многими сравнил: ну все похоже! Прямо не знаю, что делать... Кусок-то обычный:

<...>
LPDIRECTDRAW7 lpdd7;
LPDIRECTDRAWSURFACE7 lpddprimary;
DDSURFACEDESC2 ddsd;
<...>
ZeroMemory(&ddsd, sizeof(ddsd));
ddsd.dwSize=sizeof(ddsd);
<...>
lpdd7->CreateSurface(&ddsd, &lpddprimary, NULL);
lpddprimary->Lock(NULL, &ddsd, DDLOCK_WAIT, NULL);
<...>

...но результат неожиданный! Проблема, видимо, в Lock(), но какая? Прошу, помогите, а то уже третий день заснуть не могу!)
Заранее спасибо!
Misfit Kid вне форума Ответить с цитированием
Старый 20.06.2011, 22:38   #2
Misfit Kid
Новичок
Джуниор
 
Регистрация: 20.06.2011
Сообщений: 4
По умолчанию

Ну я имею в виду, что тут вообще может быть? *я понимаю, что код у всех такой)))*
Misfit Kid вне форума Ответить с цитированием
Старый 21.06.2011, 18:52   #3
An1ka
C++,DirectX/OpenGL
Форумчанин
 
Регистрация: 09.01.2011
Сообщений: 422
По умолчанию

Цитата:
Сообщение от Misfit Kid Посмотреть сообщение
но только я жму execute (ctrl+F5), как вываливается характерное сообщение типа "probe.exe вызвало ошибку и будет закрыто
Нажимай F10/F11 и проверяй построчно.

Цитата:
Сообщение от Misfit Kid Посмотреть сообщение
...но результат неожиданный! Проблема, видимо, в Lock(), но какая?
Надо проверку каждой функции делать, проверять на DD_OK.
DirectDrawCreate
SetCooperativeLevel
CreateSurface
DD_OK вернули ?

Код:
  HRESULT ddrval;
  DDSURFACEDESC	ddsd;
  LPDIRECTDRAW  lpDD;
  LPDIRECTDRAWSURFACE  lpDDSPrimary;

	  ddrval = DirectDrawCreate( NULL, &lpDD, NULL );
	   if( ddrval != DD_OK )
		return false;
	  ddrval = lpDD->SetCooperativeLevel( NULL, DDSCL_NORMAL );
	   if( ddrval != DD_OK )
		return false;

	  memset(&ddsd,0,sizeof(DDSURFACEDESC));
	  ddsd.dwSize = sizeof(DDSURFACEDESC);
	  ddsd.dwFlags = DDSD_CAPS ;
	  ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE ;
	  ddrval = lpDD->CreateSurface( &ddsd, &lpDDSPrimary, NULL );
	   if( ddrval != DD_OK )
		return false;

	  lpDDSPrimary->Lock(NULL, &ddsd, DDLOCK_WAIT, NULL);
An1ka вне форума Ответить с цитированием
Старый 21.06.2011, 19:20   #4
Misfit Kid
Новичок
Джуниор
 
Регистрация: 20.06.2011
Сообщений: 4
По умолчанию

Ок, сделаю так! Я пока писал только if(lpDDSPrimary->Lock(NULL, &ddsd, DDLOCK_WAIT, NULL)==DD_OK) {...} и не то чтобы там была ошибка и if был обойден, а опять все вылетело с тем же сообщением... Сдается мне, Lock() вообще не может нормально выполниться, если даже какую-нибудь ошибку вернуть не может.
Misfit Kid вне форума Ответить с цитированием
Старый 21.06.2011, 22:06   #5
Misfit Kid
Новичок
Джуниор
 
Регистрация: 20.06.2011
Сообщений: 4
По умолчанию

Вот что получилось. Поставил я эти if'ы на каждую функцию, ошибка пришла от CreateSurface: "invalid parameter...". Раскомментировал все флаги ddsd, вернулось DD_OK. Затем ошибка вернулась от Lock: "call successful, but returned FALSE". Заметил опечатку, убрал.
Проблема, похоже, решена!)) Большое спасибо)
Misfit Kid вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DOS на FASM. Программа быстро вылетает. Stilet Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 8 01.11.2016 18:44
вылетает программа при использовании dll radiohobbyt Win Api 2 25.04.2011 11:39
Вылетает программа на Ассемблере. f@ntom Помощь студентам 1 02.12.2010 16:11
во время сортировки программа вылетает MaRKer.nsk Общие вопросы C/C++ 3 10.04.2010 15:49
Программа на C вылетает по непонятным причинам Lavisa Общие вопросы C/C++ 17 01.08.2009 18:45