![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
初めて質問させていただきます。
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ランキング
-
既定のコンストラクタがありま...
-
C++にてtemplateで受け取った任...
-
戻り値を返す関数の前に(void)...
-
void*型の配列について
-
コールバックって・・・
-
構造体を宣言と共に初期化する方法
-
ウインドウの移動禁止
-
const_castのつかいどころを教...
-
クラス間でのクラスの共有?
-
コンパイルエラー: LNK2001
-
静的でないメンバ関数の呼び出...
-
C#を勉強中でC#で壁紙を変更す...
-
VC++でGetKeyboardStateがうま...
-
ifstreamについて
-
typedef unsigned int UINT;が...
-
qsortの引数について
-
【gcc・cygwin】multiple defin...
-
bccでエラー:メンバー関数は呼...
-
Notepad++の関数リスト表示の変...
-
多重定義が起きている?--lnk20...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
既定のコンストラクタがありま...
-
【gcc・cygwin】multiple defin...
-
戻り値を返す関数の前に(void)...
-
C++にてtemplateで受け取った任...
-
多重定義が起きている?--lnk20...
-
gcc: incompatible pointer type
-
静的でないメンバ関数の呼び出...
-
int main()、void main()、void...
-
Notepad++の関数リスト表示の変...
-
C# KeyDownイベントでショート...
-
C# Controls.Addで動的に配置し...
-
ArduinoでMouse関数を使用して...
-
(void)0 はどんな意味ですか
-
DLLの関数呼び出しで引数がある...
-
void*型の配列について
-
ウインドウの移動禁止
-
const_castのつかいどころを教...
-
VC++でGetKeyboardStateがうま...
-
C言語 プロトタイプ宣言
-
stddef.hって何?
おすすめ情報