初めて質問させていただきます。
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)' に変換できません。
というエラーを返されます。これはどう対処すればいいのでしょうか?
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
えと、そもそも最終的に this->TimerProc をWin32APIに渡そうとしているんですよね?
メンバー関数をコールバック関数に使うことは、それが staticなものでなければ
ちょっとした回避策をとらないとできませんよ。
その辺はどうなっていますか?
>えと、そもそも最終的に this->TimerProc をWin32APIに渡そうとしているんですよね?
おそらく、そういうことになると思います。
>メンバー関数をコールバック関数に使うことは、それが staticなものでなければ
確認してみたらコールバック関数を扱うクラス側での定義が、
void CALLBACK TimerProc(UINT, UINT, DWORD, DWORD, DWORD);
だけでしたので、staticをつけたらうまくいきました。
ご回答、どうもありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 共用体について コマンドライン引数で値を2つ入力したときに、argv[2]の値をUNI u1 4 2022/04/25 20:34
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# C++初心者です stirng 2 2022/09/20 20:43
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# leetcode 155 minstack 1 2022/05/07 16:43
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Notepad++の関数リスト表示の変...
-
ArduinoでMouse関数を使用して...
-
C++でイベントドリブンなコード...
-
critical error c0000005
-
見た目は同じソースなのにエラ...
-
Arduinoでの圧電スピーカーとタ...
-
const_castのつかいどころを教...
-
C# KeyDownイベントでショート...
-
static変数の配列の初期値を空...
-
【gcc・cygwin】multiple defin...
-
既定のコンストラクタがありま...
-
コンパイルエラーの原因がわか...
-
#define _CRT_SECURE_NO_WARNIN...
-
【C++】関数ポインタの使い方
-
プログラミングで二番目に大き...
-
プログラムでの数字につく”f”の...
-
3のつく数と3の倍数を表示 C言語
-
std::set<int> で、ある値が何...
-
Enterキーを押されたら次の処理...
-
「Aに対するBの割合」と「Aに対...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
既定のコンストラクタがありま...
-
【gcc・cygwin】multiple defin...
-
Notepad++の関数リスト表示の変...
-
戻り値を返す関数の前に(void)...
-
ArduinoでMouse関数を使用して...
-
C++にてtemplateで受け取った任...
-
int main()、void main()、void...
-
多重定義が起きている?--lnk20...
-
C# KeyDownイベントでショート...
-
静的でないメンバ関数の呼び出...
-
VC++でGetKeyboardStateがうま...
-
C# Controls.Addで動的に配置し...
-
gcc: incompatible pointer type
-
void*型の配列について
-
const_castのつかいどころを教...
-
C言語 ① 5秒間 1秒間隔で点滅を...
-
(void)0 はどんな意味ですか
-
DLLの関数呼び出しで引数がある...
-
H8マイコンのシリアル通信につ...
-
TimerProc コールバック関数を...
おすすめ情報