????????
???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????????
?????????????????????????????????????????????????????????(???)?????????????????????????????????????????????????????? ????????????????????????????煤?????????????????????????????????????????????????????????????????????????????????
????????????????????
??????1??????????????????
??????2??????????????????????????????????????????????????????
??????3???????????????????????????????????煤???????????????????????写????
?????????????????
?????????????????????????????????????????????????????????????????????????????????????????些????????(?绶�????int)??????煤?????
?????????????????????????????????????????????????????????????写???????????? 些??????????????e??????????????shell????shake?????????????????????????????????????????????????????????????????;??????????????????????????(int??float??string)???????????????????????煤???????????谢????
???????????????????????纾�???????????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????????谢??????????????????????????????????SetTimer() API????????????????????????????????????????????????????????????????????????????小?
???????????????????API??????EnumWindow()???????????????械?????????????????????????????????????????????????????????????????????????????械??????????????EnumWindow()?????????????????未????????????????????????????????????????????????????????????????????????????谢??????
????????????????????????????C?????????????C++?校???????C?????????????????械????????????????????????????????????????C++??????????????????(functor)????????????????
?????????????????
???????????
???????娲�???????sort.dll???????????????????????CompareFunction??????--typedef int (__stdcall *CompareFunction)(const byte*?? const byte*)??????????????????????????????????????????Bubblesort()??Quicksort()???????????????????????????????????????
????void DLLDIR __stdcall Bubblesort(byte* array??intsize??int elem_size??CompareFunction cmpFunc);
????void DLLDIR __stdcall Quicksort(byte* array??intsize??int elem_size??CompareFunction cmpFunc);
?????????????????????2?????
????·byte * array????????????????(????????)??
????·int size?????????????????
????·int elem_size????????????????小??????????位??
????·CompareFunction cmpFunc????????????????????????????
????????????????????????????????????味??????????????????????妫�???????????????? ???????????????????????????????????写??????????????????未????????????????????????????????????????????????????????????渭?????(????写???????????????????????)??
????·-1??????????????小?????????????????????校?????????????????妾�
????·0???????????????????????????位?貌???????????????????????校??????娑�????谓??
????·1????????????????????????????????校?????????????????妾�
?????????????????????Bubblesort()????????锟�?Quicksort()??????????
????void DLLDIR __stdcall Bubblesort(byte* array??intsize??int elem_size??CompareFunction cmpFunc)
????{
????for(int i=0; i < size; i++)
????{
????for(int j=0; j < size-1; j++)
????{
????//?????????
????if(1 ==(*cmpFunc)(array+j*elem_size??array+(j+1)*elem_size))
????{
????//????????????????
????byte* temp = new byte[elem_size];
????memcpy(temp?? array+j*elem_size?? elem_size);
????memcpy(array+j*elem_size??array+(j+1)*elem_size??elem_size);
????memcpy(array+(j+1)*elem_size?? temp?? elem_size);
????delete [] temp;
????}
????}
????}
????}
????????????????????memcpy()?????????????????????????妫�???????????
????????????????????????????????????????????Bubblesort()???????????卸?????????????????????????????????????????????????
????int __stdcall CompareInts(const byte* velem1?? constbyte* velem2)
????{
????int elem1 = *(int*)velem1;
????int elem2 = *(int*)velem2;
????if(elem1 < elem2)
????return -1;
????if(elem1 > elem2)
????return 1;
????return 0;
????}
????int __stdcall CompareStrings(const byte* velem1?? constbyte* velem2)
????{
????const char* elem1 = (char*)velem1;
????const char* elem2 = (char*)velem2;
????return strcmp(elem1?? elem2);
????}
?????????????????????????????????械?????????????????5???????????Bubblesort()??Quicksort()?????????????????????????????
????int main(int argc?? char* argv[])
????{
????int i;
????int array[] = {5432?? 4321?? 3210?? 2109?? 1098};
????cout << "Before sorting ints withBubblesort ";
????for(i=0; i < 5; i++)
????cout << array[i] << ’ ’;
????Bubblesort((byte*)array?? 5?? sizeof(array[0])??&CompareInts);
????cout << "After the sorting ";
????for(i=0; i < 5; i++)
????cout << array[i] << ’ ’;
????const char str[5][10] ={"estella"??"danielle"??"crissy"??"bo"??"angie"};
????cout << "Before sorting strings withQuicksort ";
????for(i=0; i < 5; i++)
????cout << str[i] << ’ ’;
????Quicksort((byte*)str?? 5?? 10?? &CompareStrings);
????cout << "After the sorting ";
????for(i=0; i < 5; i++)
????cout << str[i] << ’ ’;
????return 0;
????}
???????????薪???????(?????????)????????????????????????????????????????????????????????????
???????????
?????????????校????????????????__stdcall????????????????????????????????????????????????????????????????魏???????????Win32????????????????????????????__stdcall????????????????????????????斜??????????????械?Win32 API(????????????????????)????????????????????????????????????????????????????????????????????Pascal??????????? ??C/C++?校????????????????????????????????????煤???;??????????C/C++??????????????__cdecl???????????????????? C/C++?????????
????Windows?????????????????????(Pascal???)?????????小???????????????????Windows????????????????????????????640KB??????????
????????????__stdcall???????????CALLBACK??????????windef.h?校?
????#define CALLBACK __stdcallor
????#define CALLBACK PASCAL //??PASCAL????#defined??__stdcall
????????????????C++????
???????????????????C++??写??????????????????写?????械???????????????????????渭????
????class CCallbackTester
????{
????public:
????int CALLBACK CompareInts(const byte* velem1?? constbyte* velem2);
????};
????Bubblesort((byte*)array?? 5?? sizeof(array[0])??
????&CCallbackTester::CompareInts);
?????????????????????????????????????????
????error C2664: ’Bubblesort’ : cannot convert parameter 4from ’int (__stdcall CCallbackTester::*)(const unsigned char *??const unsignedchar *)’ to ’int (__stdcall *)(const unsigned char *??const unsigned char *)’There is no context in which this conversion is possible
?????????????????????????????????????this????????????????????????static??