c:\d\dmd2\src\dfl\internal\winapi.d(2078): Error: long has no effect in expression (0)
長らくこのエラーのせいでDFLが新しいdmdで使うことができなかったが,やっと原因がわかった.
他の人はすぐ直せていて困っていなかったのだろうか?
報告されている場所はここ.
enum: LRESULT { TBDDRET_DEFAULT = 0, // <<<<<<<<<<<<< TBDDRET_NODEFAULT = 1, TBDDRET_TREATPRESSED = 2, }
なんでやねん,と.
で,ふとTBDDRET_DEFAULTで全文検索してみたら,使っている場所は一カ所だけだった.
protected override void onReflectedMessage(ref Message m) { switch(m.msg) { case WM_NOTIFY: { auto nmh = cast(LPNMHDR)m.lParam; switch(nmh.code) { case NM_CLICK: { auto nmm = cast(LPNMMOUSE)nmh; if(nmm.dwItemData) { auto tbb = cast(ToolBarButton)cast(void*)nmm.dwItemData; scope ToolBarButtonClickEventArgs bcea = new ToolBarButtonClickEventArgs(tbb); onButtonClick(bcea); } } break; case TBN_DROPDOWN: version(DFL_TOOLBAR_NO_MENU) // This condition might be removed later. { } else // Ditto. { auto nmtb = cast(LPNMTOOLBARA)nmh; // NMTOOLBARA/NMTOOLBARW doesn't matter here; string fields not used. auto tbb = buttomFromID(nmtb.iItem); if(tbb) { version(DFL_TOOLBAR_NO_MENU) // Keep this here in case the other condition is removed. { } else // Ditto. { if(tbb._cmenu) { auto brect = tbb.rectangle; tbb._cmenu.show(this, pointToScreen(Point(brect.x, brect.bottom))); // Note: showing a menu also triggers a click! } } } } return TBDDRET_DEFAULT; // <<<<<<<<<<<<<<<<<<<<<<< default: ; } } break; default: ; super.onReflectedMessage(m); } }
こいつかー・・・ん?
protected override void onReflectedMessage(ref Message m)
・・・.
戻り値型が void だと・・・?
お前のせいかあああ!
ってわけで,return 文をコメントアウトしたらコンパイルできるようになりましたw
MSDN によると,TBDDRET_DEFAULT という値は確かにどこかで返さなければいけないみたいだけど,onReflectedMessage は何も返すことができないので,周辺の設計がおかしいのではないだろうか?
後で Chris に報告しなきゃ.
恒例の patch を作ったので D2 ユーザの人は勝手に持って行ってください.
http://rayerd.plala.jp/pukiwiki/ingwiki/index.php?plugin=attach&refer=DFL&openfile=patch_dfl_rev81_dmd2038.zip
D1 ユーザは動いたらラッキーってことで.
- 主な変更点
- inoutをrefに
- onReflectedMessageのバグの修正
- opEqualsがref constを要求することへの対応