MonoDevelopを試しました。バージョンは2.8.8.4です。
予想以上にパワーアップしていて驚きました。
- MonoなしにMicrosoft .NET上で動く。作成したGtk#アプリも同様。
- ソリューションはVisual Studio互換。そのままVisual Studioで開ける。
1については、昔のGtk#アプリはMono上でしか動かなかったような記憶があります。2については以下で述べます。
ソリューションの互換性
私が試した手順を書きます。
まず、MonoDevelopでC#のGtk# 2.0プロジェクトを作成します。プロジェクトの動作を確認したら、MonoDevelopは閉じます。
次にそのソリューションをVC# 2010 Express Editionで開きます。ソリューションのフォーマットが2008形式らしく、変換を要求されます。変換すれば特に問題なく動作します。
VC#を閉じて再びMonoDevelopで開きます。変換したのが不安でしたが、特に問題なく開けました。
Gtk#
上のサンプルは、フォームにボタンを貼って以下のハンドラを書いたものです。
ダイアログの破棄がDispose()ではなくDestroy()なのに戸惑いました。最初はWindows Formsの感覚でダイアログのインスタンスをusingで囲んだりしたのですが、うまく動きませんでした。
Windows FormsのMessageBoxとは違い、デフォルトで親ウィンドウの中央に表示されるのは良いですね。
経緯
少し前までGUIツールを作って遊んでいましたが、最近の勉強会では半分以上の人がMacかLinuxを使っているため、Windowsでしか動かないようなツールは肩身が狭くなって来ました。
MonoでもWindows Formsアプリは動きますが、挙動が異なる部分もあります。一番問題なのはP/Invokeです。Windows Formsでは出来ないことをP/Invokeで補うことは良くありますが、そういう部分がMonoではまったく動きません。
Gtk#で開発すればMonoでの互換性は問題なさそうですが、前述のように以前Gtk#アプリはEXEダブルクリックで起動しませんでした。これではWindowsで問題があります。
以上の理由で、マルチプラットフォーム実現の手段としてMonoのことは忘れていました。
最近、PlayStation Suite SDKのオープンβ版が公開されました。MonoDevelopがMonoなしで動いているようです。
あれ?と思って本家MonoDevelopを試してみると、そちらもMonoなしで動くようになっていました。それが予想外で驚いたため、このような記事を書きました。
Visual Studioとの互換性も強化されており、マルチプラットフォーム目的でのGtk#はかなり成熟したように感じます。しばらく試しながら様子を見てみます。