dポイントプレゼントキャンペーン実施中!

初めて質問させていただきます。

Visual C++ 6.0でMFCのダイアログベースでマルチメディアタイマーを使おうとしてるのですが、


class CTimeCounter
{
public:
LPTIMECALLBACK lpTimeCallback;
UINT TimerID;
UINT uPeriod;
UINT uDelay;

void GetPeriod();
void AttachAD(LPTIMECALLBACK lpProc);

CTimeCounter();
virtual ~CTimeCounter();
};

void CTimeCounter::AttachAD(LPTIMECALLBACK lpProc)
{
TimerID = uPeriod = NULL;

GetPeriod();//最小分解能を取得し、uPeriodに代入

this->uDelay = uPeriod;
this->lpTimeCallback = lpProc;
}


としてCTimeCounter ctcを宣言したのですが、OnInitDialogのTODOの箇所でコールバック関数のアドレスを取得しようとして

ctc.AttachAD(this->TimerProc);

とすると

error C2664: 'AttachAD' : 1 番目の引数を 'void (unsigned int,unsigned int,unsigned long,unsigned long,unsigned long)' から 'void (__stdcall *)(unsigned int,unsigned int,unsign
ed long,unsigned long,unsigned long)' に変換できません。

というエラーを返されます。これはどう対処すればいいのでしょうか?
よろしくお願いします。

A 回答 (1件)

えと、そもそも最終的に this->TimerProc をWin32APIに渡そうとしているんですよね?



メンバー関数をコールバック関数に使うことは、それが staticなものでなければ
ちょっとした回避策をとらないとできませんよ。
その辺はどうなっていますか?
    • good
    • 0
この回答へのお礼

>えと、そもそも最終的に this->TimerProc をWin32APIに渡そうとしているんですよね?
おそらく、そういうことになると思います。

>メンバー関数をコールバック関数に使うことは、それが staticなものでなければ
確認してみたらコールバック関数を扱うクラス側での定義が、

void CALLBACK TimerProc(UINT, UINT, DWORD, DWORD, DWORD);

だけでしたので、staticをつけたらうまくいきました。
ご回答、どうもありがとうございます。

お礼日時:2007/02/04 10:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!