2010-11-27 3 views
1

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

Regular Функция

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); 

чем разница?
Примечание: Я не уверен, как работает Calling Conventions, пример поможет!

ответ

2

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

+0

Ну, они не могут изменить CALLBACK, потому что это сломает все программы, но то, что они могут сделать, это #ifdef, чтобы это означало что-то другое на какой-либо другой платформе (например, Alpha, MIPS и т. Д.), – 2010-11-28 19:56:48

2

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

+0

Почему downvote? Согласен. – 2010-11-27 19:47:34