Visual C : ошибка C2664: ‘ReleaseDC’: не удается преобразовать параметр 1 из ‘HDC’ в ‘HWND’

#c #visual-studio-2008

#c #visual-studio-2008

Вопрос:

Я хочу скомпилировать старую (1998) реализацию Edge Collapse из журнала разработчика игр (файл проекта сжат в «melax.zip «) в Visual Studio 2008.

В строке 390 из winmain.cpp Я получаю следующую ошибку компиляции:

 winmain.cpp(390) : error C2664: 'ReleaseDC' : cannot convert parameter 1 from 'HDC' to 'HWND' 
  

и снова в строке 439.

Как я могу это исправить?

Комментарии:

1. Ответ удален, соответствующий код не был опубликован, поэтому мы должны были догадаться (да, вы ссылались на zip, но простая публикация строки 390 ускорила бы решение)

2. Это слишком долго. Я включил ссылку на него в gdmag, пользователь воспользовался ею и увидел ошибку. Довольно впечатляюще видеть, как он запускается.

3. строка 390 слишком длинная для публикации? теперь я действительно хочу это увидеть, но все еще недостаточно, чтобы загрузить его.

4. @omgzor «Довольно впечатляюще видеть, как он компилируется «. Это исправлено для вас.

5. @KevinDTimm: Да, извините, только в тот момент у меня свело руки.

Ответ №1:

Аргументы в ReleaseDC меняются местами при вызове — он вызывает ReleaseDC(hDC, hWnd) , в то время как правильная подпись равна

 int ReleaseDC(
  __in  HWND hWnd,
  __in  HDC hDC
);
  

Наслаждайтесь исправлением ошибки 13-летней давности 🙂

Ответ №2:

Указанная строка выглядит следующим образом:

 ReleaseDC(hDC, hWnd);
  

Однако функция ReleaseDC принимает параметры в обратном порядке.