reinterpret_castの変換問題を解決するには

解決


紅輝  2008-07-18 19:43:59  No: 68740

数ミリセカンドタイマーを使ったプログラムを書いていますが、デバッグすると、いつもこれが表示されます。
「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()関数へ飛ばして処理をさせています。

デバッグ時に表示される情報によると、大きいサイズに自動的に修正してくれているので、問題なく使えてはいるのですが、正しくはどの様に書けばいいのでしょうか?
宜しくお願いします。


tetrapod  2008-07-18 20:14:03  No: 68741

Win64 で問題アリアリなコードなので警告が出てるわけだ

Win32 でしか動かさないのあれば
-Wp64 [64bit 移植への対応] のチェックを外せば消えるよ

64bit 対応を行うのであれば要書き直し(絶対に動かないので)


Blue  2008-07-18 21:27:39  No: 68742

> 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);
</引用>


Blue  2008-07-18 21:28:49  No: 68743

リンク先間違えたorz
http://msdn.microsoft.com/en-us/library/ms713423(VS.85).aspx


紅輝  2008-07-18 21:59:31  No: 68744

tetrapodさん  64ビット移植への対応を探し出して「いいえ」に変えたところ警告表示が消えました。  ありがとう御座いました。
Blueさん    いつもアドバイス頂き感謝しています。英語の説明をじっくり見ましたが、私には、荷が重すぎました。  Hi


Blue  2008-07-19 00:55:04  No: 68745

>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) 
するだけということを言いたかったのですけど。


tetrapod  2008-07-19 01:54:08  No: 68746

うん。書き直す=そういうこと、なわけなんだけど
こういう質問してるって事は他の場所でも W64 対応コード書いていないと思うわけよ。
ならば W64 系はあっさり無視、と割り切っちゃうほうが幸せになれそうな気がしただけ。


紅輝  2008-07-23 07:04:43  No: 68747

Blueさん
教えていただいた通りに書き換えたところ、デバッグでもレリースでも、いつも出てくる注意書きが出なくなり、気分がスッキリしました。
Many Thank!!


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加