数ミリセカンドタイマーを使ったプログラムを書いていますが、デバッグすると、いつもこれが表示されます。
「warning C4312: 'reinterpret_cast' : 'DWORD' からより大きいサイズの 'CDigitalSoundCWView *' へ変換します。」
なお、プログラムはVisual C++ 2005を使っています。
OnInitialUpdate()の中に
dwTimerID = timeSetEvent(57, 1, timerFunc, reinterpret_cast<DWORD_PTR>(this), TIME_PERIODIC);
を書いています。 (57ミリセカンド毎にタイマーが働いているつもりです)
void CALLBACK timerFunc(UINT uiID, UINT uiNo, DWORD dwCookie, DWORD dwNo1, DWORD dwNo2)
{
static int TimeCount = 0;
TimeCount++;
if (TimeCount >= 0){
reinterpret_cast<CDigitalSoundCWView*>(dwCookie)->OnTimerX();
TimeCount = 0;
}
}
上記のCallBack関数から、OnTimerX()関数へ飛ばして処理をさせています。
デバッグ時に表示される情報によると、大きいサイズに自動的に修正してくれているので、問題なく使えてはいるのですが、正しくはどの様に書けばいいのでしょうか?
宜しくお願いします。
Win64 で問題アリアリなコードなので警告が出てるわけだ
Win32 でしか動かさないのあれば
-Wp64 [64bit 移植への対応] のチェックを外せば消えるよ
64bit 対応を行うのであれば要書き直し(絶対に動かないので)
> void CALLBACK timerFunc(UINT uiID, UINT uiNo, DWORD dwCookie, DWORD dwNo1, DWORD dwNo2)
の型があっていないのでは?
timeSetEvent
http://madia.world.coocan.jp/cgi-bin/Vcbbs/wwwlng.cgi?print+200807/08070016.txt
より
<引用>
the lpTimeProc parameter is interpreted as a function pointer with the following signature: void (CALLBACK)(UINT uTimerID, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dw1, DWORD_PTR dw2);
</引用>
リンク先間違えたorz
http://msdn.microsoft.com/en-us/library/ms713423(VS.85).aspx
tetrapodさん 64ビット移植への対応を探し出して「いいえ」に変えたところ警告表示が消えました。 ありがとう御座いました。
Blueさん いつもアドバイス頂き感謝しています。英語の説明をじっくり見ましたが、私には、荷が重すぎました。 Hi
>void CALLBACK timerFunc(UINT uiID, UINT uiNo, DWORD dwCookie, DWORD dwNo1, DWORD dwNo2)
を
void CALLBACK timerFunc(UINT uiID, UINT uiNo, DWORD_PTR dwCookie, DWORD_PTR dwNo1, DWORD_PTR dwNo2)
するだけということを言いたかったのですけど。
うん。書き直す=そういうこと、なわけなんだけど
こういう質問してるって事は他の場所でも W64 対応コード書いていないと思うわけよ。
ならば W64 系はあっさり無視、と割り切っちゃうほうが幸せになれそうな気がしただけ。
Blueさん
教えていただいた通りに書き換えたところ、デバッグでもレリースでも、いつも出てくる注意書きが出なくなり、気分がスッキリしました。
Many Thank!!
ツイート | ![]() |