MusicBeeを使い始めて、プラグインを作ってきたが、デバッグビルドしないと本体起動時にクラッシュするため、デバッグビルドして使ってきた。
原因は日々調査してきたのであるが、なかなかつかめなかった。
コードが悪いのか、開発環境なのか、MusicBeeプラグインの流儀があるのかどうか?
やっと解決できた。原因:MusicBeeプラグインAPIのメソッド定義にミスがあった!
これでもデバッグビルドだと動作してしまうのが不思議なのだが、そういうことだった。
public delegate System.Windows.Forms.ToolStripItem MB_AddMenuItemDelegate(string menuPath, string hotkeyDescription, EventHandler handler);
public delegate bool MB_AddTreeNodeDelegate(string treePath, string name, System.Drawing.Bitmap icon, EventHandler openHandler, EventHandler closeHandler);
これが正しい定義であり、このように配布されているファイルを変更してビルドすると動作するようになった。
1個目のメソッドはメニュー項目を追加するメソッドであり、右クリックメニューを追加するために使っていた。オリジナルファイルでは第4引数として、もう一つ、EventHandler型の引数があり、そのように呼び出していた。そのため、バッファオーバーランでも起こしていたのであろう。
デバッグビルドではなんらかの関係で、この辺りが安全側に降られて動作していたものと思われる。
自宅サーバへの送信のアカウントを設定画面を作らずにソースに埋め込みで作っている。保存の方法を考えていないからで、ペンディングにしているからであるが、今後は#ifディレクティブで、デバッグビルドではテストアカウント、リリースビルドでは本番アカウントと使い分けることができるようになるので、ソースの変更が不要になる。
完成させるまでとりあえず、自分用であればこのまま使えることになった。
それにしても、これだけの大きな「バグ」が放置されているというのも、次のバージョンに注力しているからか?まぁ、開発者<利用者だしな。仕方ないと言えば仕方ない。
コメント