2009-04-03 23 views
0

コールバック関数を利用しようとする非常に単純なワンボタンMFCダイアログアプリケーションを作成しました。アプリは遵守して正常に動作しますが、コールバックルーチンは決して起動しません。コールバックルーチンがトリガーされない

コールバックを正しくトリガするためには、何を変更する必要がありますか?

あなたがここにtest.zipファイルをダウンロードすることができます(テスト用アプリはそれを試してみることができ、より多くの人々を確保するために、VS 2003である):http://tinyurl.com/testfile-zip

コードをCodeProjectの上のアラームクラスを利用して、コールバック関数があります3秒ごとに(コードが渡されることによって決まる)トリガーされることを前提としています。

ありがとうございます!

+0

コールバック関数がブレークポイントを設定するだけでなく、関数内にメッセージボックスを置くことで起動しているかどうかを確認するために、既にテストしていますが、fuctionにはまったく到達していません。 –

答えて

1

私はあなたのコードを見ていると私はボタンから呼び出された関数が問題

void CTestDlg::OnBnClickedButton1() 
{ 
    CAlarmClock clock; 

    REPEAT_PARMS rp; 
    ZeroMemory(&rp, sizeof(REPEAT_PARMS)); 

    rp.bRepeatForever = TRUE; 
    rp.Type = Repeat_Interval; 
    rp.ss = 3; 

    clock.SetRepeatAlarm(0, 0, 0, rp, CallbackRtn); 
} 

これは、関数のスタック上の目覚まし時計を作成していると信じています。 したがって、このCAlarmclockオブジェクトは、関数の最後にその内容と共に破棄されます。

実際にコールバックを実行するのに十分な長さのためには、ダイアログボックスが存在する限り、それが存在するためのダイアログクラスのメンバ変数として追加する必要があります。

このクラスを正しく使用する方法については、CAlarmclock codeprojectページのサンプルコードを参照してください。

+0

私は、OPコードを使ってクラスのメンバーとしてCALarmclocoクロックを入れてテストしました。 – NotJarvis

+0

ありがとう!私はそのような単純なことを見落とすことはできません;-)あなたは、問題が基本に戻ることを忘れた何か他のものと関係していると確信しています! –