????????
???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????????
?????????????????????????????????????????????????????????(???)?????????????????????????????????????????????????????? ????????????????????????????ú?????????????????????????????????????????????????????????????????????????????????
????????????????????
??????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??