В чем разница между функцией обратного вызова и обычной функцией? - PullRequest
1 голос
/ 27 ноября 2010

Хорошо, я приведу два примера использования функции CALLBACK и обычной функции.
Примечание: я не писал эти примеры.

Обычная функция

int sumExample (int a, int b)
{
    return a + b;
}
int main()
{
     int = sumExample(1, 3);
     cout  >> int;
     return 0;
}

Функция с использованием _stdcall

int __stdcall sumExample (int a, int b);

в чем разница?
Примечание: я не уверен, как работает Соглашение о вызовах, пример может помочь!

Ответы [ 2 ]

2 голосов
/ 27 ноября 2010

По сути, соглашение о вызовах определяет детали реализации того, как будет вызываться функция.Большинство библиотек используют стандартное соглашение о вызовах C - __cdecl.WinAPI, однако, ожидает __stdcall.Вам нужно знать только две вещи о соглашениях о вызовах: что они должны соответствовать, например, вы не можете преобразовать void(*)(int, int), который неявно является void(__cdecl *)(int, int), в void(__stdcall *)(int, int), и что по умолчанию это __cdecl.CALLBACK это просто WinAPI #define, чтобы они могли измениться, если захотят.

2 голосов
/ 27 ноября 2010

Не очень, правда. «Обратный вызов» - это имя, данное функции для передачи другой функции, которая будет «вызывать ее обратно», когда ... происходит что-то полезное. Нет причины, по которой его нельзя использовать как обычную функцию.

...