Q&A

  • 콜백함수...
음 콜백함수에 대해 설명좀해주세요...



아직 내공이 부족해서인지 책을 보고 또 봐도 왜 콜백함수를 써야하는지



이해가 되지않는군요...



읽어주셔서 감사합니다^^

2  COMMENTS
  • Profile
    치버 2001.11.28 08:38
    콜백함수란 사용자가 사용하는 함수에서 기능을 수행할 때

    특정루틴을 사용자가 직접 지정할 수 있게 되어있는 경우에 그 직접 지정된

    함수를 말하죠.



    그러니까 AProc; 라는 함수의 코딩을 예로 들어보면..



    TCallBackProcType = procedure (AParam, BParam: Longint); stdcall;



    procedure AProc(CallBackProc: TCallBackProcType);

    begin

    어쩌구..

    저쩌구..



    if CallBackProc<>nil then CallBackProc(AParam, BParam);



    저쩌구..

    어쩌구..

    end;



    위의 AProc 란 것이 함수로 정의돼어 있다고 할 때 사용자가 저 함수가

    필요해서 호출을 합니다. 그런데 CallBackProc 파라미터로 사용자는

    함수의 포인터를 건네줍니다. 물론 그 건네준 함수는 사용자가 직접 만든

    함수라야 될것이고 TCallBackProcType 를 만족시키는 파라미터를 가진

    함수이어야 할겁니다.



    그 포인터를 건네준 함수가 콜백함수죠.



    사용자가 따로 정의한 함수를 봅시다.

    procedure myProc(AParam, BParam: longint); stdcall;

    begin

    if AParam=0 then

    showmessage('AParam is 0');

    end;



    결국 함수를 다 적고 말았는데 사용자가 따로 정의한 함수가 myProc 라고 할 때

    사용자는 AProc 함수를 호출할 때 다음과 같이 호출 할 수 있습니다.

    AProc(@MyProc);

    위의 글에서 MyProc 가 AProc 라는 함수의 콜백함수가 되죠.



    그러니까 콜백함수를 넣어서 사용할 수 있게 하는 이유는 사용자가 특정함수의

    처리중에 사용자마음대로 처리할 수 있도록 하는 기능을 넣어주기 위함이죠.

    만약 AProc 가 콜백함수를 받아들이지 않는다면 AParam=0 일 때 위의 것처럼

    ShowMessage 가 되는 상황은 없겠지만 사용자가 마음대로 함수를 만들어서

    콜백에 넣어
  • Profile
    ClickTest 2001.11.28 09:32
    콜백함수에 관심을 가지게 된게 여기 Q&A 와 팁모아를 뒤져서 EnumWindows 요놈을



    찾아내서 실행된 윈도우 목록을 구했는데 왜 EnumWindows를 콜백함수로 구현을 해야하는지



    이해가 되지않았습니다...



    님의 답변이 많은 도움이 됐습니다...



    이제 조금 Feel~~~이 오는군요... 감사합니다...



    님의 답변을 팁모아에 올려주시면 저같은 초보들에게는 많은 도움이 될 것 같습니다!



    ^^



    치버 wrote:

    > 콜백함수란 사용자가 사용하는 함수에서 기능을 수행할 때

    > 특정루틴을 사용자가 직접 지정할 수 있게 되어있는 경우에 그 직접 지정된

    > 함수를 말하죠.

    >

    > 그러니까 AProc; 라는 함수의 코딩을 예로 들어보면..

    >

    > TCallBackProcType = procedure (AParam, BParam: Longint); stdcall;

    >

    > procedure AProc(CallBackProc: TCallBackProcType);

    > begin

    > 어쩌구..

    > 저쩌구..

    >

    > if CallBackProc<>nil then CallBackProc(AParam, BParam);

    >

    > 저쩌구..

    > 어쩌구..

    > end;

    >

    > 위의 AProc 란 것이 함수로 정의돼어 있다고 할 때 사용자가 저 함수가

    > 필요해서 호출을 합니다. 그런데 CallBackProc 파라미터로 사용자는

    > 함수의 포인터를 건네줍니다. 물론 그 건네준 함수는 사용자가 직접 만든

    > 함수라야 될것이고 TCallBackProcType 를 만족시키는 파라미터를 가진

    > 함수이어야 할겁니다.

    >

    > 그 포인터를 건네준 함수가 콜백함수죠.

    >

    > 사용자가 따로 정의한 함수를 봅시다.

    > procedure myProc(AParam, BParam: longint); stdcall;

    > begin

    > if AParam=0 then

    > showmessage('AParam is 0');

    > end;

    >

    > 결국 함수를 다 적고 말았는데 사용자가 따로 정의한 함수가 myProc 라고 할 때

    > 사용자는 AProc 함수를 호출할 때 다음과 같이 호출 할 수 있습니다.

    > AProc(@MyProc);

    > 위의 글에서 MyProc 가 AProc 라는 함수의 콜백함수가 되죠.

    >

    > 그러니까 콜백함수를 넣어서 사용할 수 있게 하는 이유는 사용자가 특정함수의

    > 처리중에 사용자마음대로 처리할 수 있도록 하는 기능을 넣어주기 위함이죠.

    > 만약 AProc 가 콜백함수를 받아들이지 않는다면 AParam=0 일 때 위의 것처럼

    > ShowMessage 가 되는 상황은 없겠지만 사용자가 마음대로 함수를 만들어서

    > 콜백에 넣어