Вызов нескольких функций WinAPI приводит примерно к 30 ошибкам

#c #c #winapi

#c #c #winapi

Вопрос:

По какой-то причине я пытаюсь вызвать AdjustWindowRect или GetClientRect, и параметры, которые я предоставляю, в порядке. Я получаю около 30 ошибок, ни одна из которых не относится к вызову функции WinAPI.

Что могло вызвать такую вещь?

Спасибо

Например:

Следующий код:

    case WM_GETMINMAXINFO:
          {
              LPMINMAXINFO p_info = (LPMINMAXINFO)lParam;
              RECT rc = {0,0,d->w,d->h};
              DWORD dwStyle = GetWindowLongPtr( hWnd, GWL_STYLE ) ;
              AdjustWindowRect(amp;rc,dwStyle,FALSE);
              int total_border_width = 2 * GetSystemMetrics( SM_CXFRAME )   4;
              int total_border_height = 2 * GetSystemMetrics( SM_CYFRAME )   
                 GetSystemMetrics( SM_CYCAPTION ) - GetSystemMetrics( SM_CYBORDER )   5;
              POINT min,max;

              min.x = d->min_w > 0 ? d->min_w   total_border_width : p_info->ptMinTrackSize.x;
              min.y = d->min_h > 0 ? d->min_h   total_border_height : p_info->ptMinTrackSize.y;
              max.x = d->max_w > 0 ? d->max_w   total_border_width : p_info->ptMaxTrackSize.x;
              max.y = d->max_h > 0 ? d->max_h   total_border_height : p_info->ptMaxTrackSize.y;

              p_info->ptMinTrackSize = min;
              p_info->ptMaxTrackSize = max;
          }
  

Выдает:

 Error   6   error C2065: 'max' : undeclared identifier  c:UsersJoshDocumentsAL51srcwinwwindow.c  844
Error   13  error C2065: 'max' : undeclared identifier  c:UsersJoshDocumentsAL51srcwinwwindow.c  848
Error   16  error C2065: 'max' : undeclared identifier  c:UsersJoshDocumentsAL51srcwinwwindow.c  849
Error   21  error C2065: 'max' : undeclared identifier  c:UsersJoshDocumentsAL51srcwinwwindow.c  852
Error   5   error C2065: 'min' : undeclared identifier  c:UsersJoshDocumentsAL51srcwinwwindow.c  844
Error   7   error C2065: 'min' : undeclared identifier  c:UsersJoshDocumentsAL51srcwinwwindow.c  846
Error   10  error C2065: 'min' : undeclared identifier  c:UsersJoshDocumentsAL51srcwinwwindow.c  847
Error   19  error C2065: 'min' : undeclared identifier  c:UsersJoshDocumentsAL51srcwinwwindow.c  851
Error   12  error C2065: 'total_border_height' : undeclared identifier  c:UsersJoshDocumentsAL51srcwinwwindow.c  847
Error   18  error C2065: 'total_border_height' : undeclared identifier  c:UsersJoshDocumentsAL51srcwinwwindow.c  849
Error   9   error C2065: 'total_border_width' : undeclared identifier   c:UsersJoshDocumentsAL51srcwinwwindow.c  846
Error   15  error C2065: 'total_border_width' : undeclared identifier   c:UsersJoshDocumentsAL51srcwinwwindow.c  848
Error   1   error C2143: syntax error : missing ';' before 'type'   c:UsersJoshDocumentsAL51srcwinwwindow.c  841
Error   2   error C2143: syntax error : missing ';' before 'type'   c:UsersJoshDocumentsAL51srcwinwwindow.c  842
Error   4   error C2146: syntax error : missing ';' before identifier 'min' c:UsersJoshDocumentsAL51srcwinwwindow.c  844
Error   8   error C2224: left of '.x' must have struct/union type   c:UsersJoshDocumentsAL51srcwinwwindow.c  846
Error   14  error C2224: left of '.x' must have struct/union type   c:UsersJoshDocumentsAL51srcwinwwindow.c  848
Error   11  error C2224: left of '.y' must have struct/union type   c:UsersJoshDocumentsAL51srcwinwwindow.c  847
Error   17  error C2224: left of '.y' must have struct/union type   c:UsersJoshDocumentsAL51srcwinwwindow.c  849
Error   3   error C2275: 'POINT' : illegal use of this type as an expression    c:UsersJoshDocumentsAL51srcwinwwindow.c  844
Error   20  error C2440: '=' : cannot convert from 'int' to 'POINT' c:UsersJoshDocumentsAL51srcwinwwindow.c  851
Error   22  error C2440: '=' : cannot convert from 'int' to 'POINT' c:UsersJoshDocumentsAL51srcwinwwindow.c  852
  

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

1. Является ли этот код частью файла .c или .cpp?

2. Затем вам нужно переместить все объявления ваших переменных в начало блока, как указано Джеймсом Макнеллисом ниже.

Ответ №1:

Visual C поддерживает только C90 (не C99), поэтому при компиляции программы на C вы должны размещать объявления всех переменных в верхней части блока, перед любыми операторами.

Объявления min , max , total_border_height и total_border_width все они следуют по крайней мере за одним оператором в блоке.

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

1. Нет, все создается как по волшебству простым удалением AdjustRect или любой другой функции winapi, я также переименовал min и max, не повезло.