Мне, кстати, проще. Меня Ада приучила к точному описанию типов - никаких отступлений, никаких авто-преобразований. Вот, смотри:
1) попробуем написать CallBack-функцию, используя не нужные типы, а замену:

Что видим? Не получилось обмануть компилятор, это не тот прототип, программа компилироваться отказалась.
2) Чуть-чуть поправим программу, сделаем правильный прототип, но вызовем EnumWindows как процедуру, без обработки возвращаемого значения:

Что? Опять не то, "Нельзя использовать функцию EnumWindows как процедуру"
3) Ну хорошо, уговорили, пускай она возвращает результат...

Вот теперь все в порядке, откомпилировано...
Вот так и привыкаешь аккуратно использовать типы
