Тема: Помилка error LNK2019 struct _WINDOW_BUFFER_SIZE_RECORD ссылка на нера

/*Чтение событий буфера вводимых данных

--------------------------------------------------------------------------------

Функция ReadConsoleInput может быть использована для непосредственного обращения к буферу ввода консоли.
 Когда консоль создается, включается ввод информации от мыши, а ввод данных окна 
 отключается. Чтобы гарантировать, что процесс получает все события ввода, этот пример 
 использует функцию SetConsoleMode, чтобы включить ввод информации от окна и мыши. 
 Затем он входит в цикл, который читает и обрабатывает консольные события ввода.

Обратите внимание! на то, что MyErrorExit - групповой символ - заместитель для 
определяемой программой функции, которая показывает на экране и обрабатывает аварийные 
ситуации. */


#include <windows.h>
#include <stdio.h>
 

VOID MouseEventProc(MOUSE_EVENT_RECORD);
VOID ResizeEventProc(WINDOW_BUFFER_SIZE_RECORD);
VOID KeyEventProc(KEY_EVENT_RECORD);
VOID GetInputEvents(VOID);

/*void MyErrorExit(LPTSTR lpszMessage) 

{

   fprintf(stderr, "%s\n", lpszMessage);

   // Exit peacefully...

   ExitProcess(0); 

} */


  void MyErrorExit(LPTSTR lpszMessage)
  {
        MessageBox(NULL, "lpszMessage", "Console Error", MB_OK);
        return;
    }



DWORD main(VOID)
{
    HANDLE hStdin;
    DWORD cNumRead, fdwMode, fdwSaveOldMode, i;
    INPUT_RECORD irInBuf[128];

    // Получим стандартный дескриптор ввода.

    hStdin = GetStdHandle(STD_INPUT_HANDLE);
    if (hStdin == INVALID_HANDLE_VALUE)
        MyErrorExit("GetStdHandle");

    // Сохраним текущий режим ввода для будущего восстановления при
    // выходе из программы.

    if (! GetConsoleMode(hStdin, &fdwSaveOldMode) )
        MyErrorExit("GetConsoleMode");

    // Включим события ввода от мыши и окна.

    fdwMode = ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT;
    if (! SetConsoleMode(hStdin, fdwMode) )
        MyErrorExit("SetConsoleMode");

    // Цикл чтения и обработки событий ввода.

    while (1)
    {

    // Ожидание событий.

        if (! ReadConsoleInput(
                hStdin,      // дескриптор буфера ввода
                irInBuf,     // буфер, в котором читаем
                128,         // размер буфера чтения
                &cNumRead) ) // число прочитанных записей
            MyErrorExit("ReadConsoleInput");

   // Направляем события соответствующим обработчикам.

        for (i = 0; i < cNumRead; i++)
        {
            switch(irInBuf[i].EventType)
            {
                case KEY_EVENT: // ввод с клавиатуры
                    KeyEventProc(irInBuf[i].Event.KeyEvent);
                    break;

                case MOUSE_EVENT: // ввод от мыши
                    MouseEventProc(irInBuf[i].Event.MouseEvent);
                    break;

                case WINDOW_BUFFER_SIZE_EVENT: // изменение размера
                                               // экранного буфера
                    ResizeEventProc(
                        irInBuf[i].Event.WindowBufferSizeEvent);
                    break;

                case FOCUS_EVENT:  // игнорирование событий фокуса

                case MENU_EVENT:   // игнорирование событий меню
                    break;

                default:
                    MyErrorExit("unknown event type");
                    break;
            }
        }
    }

    return 0;
} 


/*

Ошибка    1    error LNK2019: ссылка на неразрешенный внешний символ 
"void __cdecl ResizeEventProc(struct _WINDOW_BUFFER_SIZE_RECORD)"
 (?ResizeEventProc@@YAXU_WINDOW_BUFFER_SIZE_RECORD@@@Z) в функции
 _main    
 
 
 Що таке ця помилка і звідки вона береться?   Що таке цей заборонений символ і код
 його начебто не зве?
 Звідки програма в цьому випадку зна, що їй взагалі необхідна ця struct _WINDOW_BUFFER_SIZE_RECORD?
 
 Чи повинен я це так розуміти що при створенні консолі
 _WINDOW_BUFFER_SIZE_RECORD може бути створена автоматично - або я зобовязаний її оголосити та ініціалізувати?

 Я начебто розумію-
 MOUSE_EVENT_RECORD та інші - це також члени структури INPUT_RECORD,
 яки в неї доволі хитро вплутані, но цілісного розуміння я не маю.

Чи можна мені ще зразок хорошого коду, який би пояснював дію першого?
Будь ласка, покладить!

Це навить гарно, що трапилась помилка- я ще багато прочту.
*/

2 Востаннє редагувалося koala (13.04.2015 21:56:42)

Re: Помилка error LNK2019 struct _WINDOW_BUFFER_SIZE_RECORD ссылка на нера

Розбираємо по літерах. Що таке

void __cdecl ResizeEventProc(struct _WINDOW_BUFFER_SIZE_RECORD)

з точки зору компілятора? Якщо так заскладно - то що таке

DWORD main(VOID)

сказати можете? А тепер повернутися назад і відповісти на перше питання?

3

Re: Помилка error LNK2019 struct _WINDOW_BUFFER_SIZE_RECORD ссылка на нера

/*
Коли ви вже книжку з початку прочитаєте? Нащо мордуєте віндове WinAPI, як елементарного в сях не розумієте? 

Як не візьметесь за розум - зроблю вудуїстичну ляльку з вашим айпішником і гамселитиму її книжкою Стівена Пратта.

Ви навіть передрати з МСДН не можете, це жах. Читайте докладніше тут: https://msdn.microsoft.com/ja-jp/library/windows/desktop/ms685035%28v=vs.85%29.aspx

Ваша проблема полягає в тому, шо ви викликали функцію, тіла якої ніде не визначене, а наявна лише її декларація.
*/
Подякували: koala, Дмитро-Чебурашка, quez3

Re: Помилка error LNK2019 struct _WINDOW_BUFFER_SIZE_RECORD ссылка на нера

Тобто я таки зобов'язаний оголосити структуру?

5

Re: Помилка error LNK2019 struct _WINDOW_BUFFER_SIZE_RECORD ссылка на нера

*WALL*  *WALL*  *WALL*  *WALL*  *WALL*  *WALL*  *WALL*  *WALL*  *WALL*  *WALL*  *WALL*  *WALL*  *WALL*

Подякували: Arete1

Re: Помилка error LNK2019 struct _WINDOW_BUFFER_SIZE_RECORD ссылка на нера

Спасибі величезише!!  Дякую дуже!!!  Читаю!

7

Re: Помилка error LNK2019 struct _WINDOW_BUFFER_SIZE_RECORD ссылка на нера

%)  *CRAZY*  *STOP*  %)  *CRAZY*  *STOP*  %)  *CRAZY*  *STOP*  %)  *CRAZY*  *STOP*  %)  *CRAZY*  *STOP*

Подякували: Дмитро-Чебурашка1

Re: Помилка error LNK2019 struct _WINDOW_BUFFER_SIZE_RECORD ссылка на нера

Це не я передрав з DSN!   Так, ось тепер я бачу першоджерело.

Re: Помилка error LNK2019 struct _WINDOW_BUFFER_SIZE_RECORD ссылка на нера

Доки вийду. Щось гальмує.
Це мабуть єксплорер.

10

Re: Помилка error LNK2019 struct _WINDOW_BUFFER_SIZE_RECORD ссылка на нера

Дмитро-Чебурашка написав:

Доки вийду. Щось гальмує.
Це мабуть єксплорер.

Ні, це не "єксплорер"...

Подякували: Djalin1