![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggBYX_MwVuWEWQcMxVJVT4k_1cA7X0VZ0-7WBqbGjpmXhdjgYgZh37-ZZF4ujiQcdEuDRIVUy-0fKrVnmmqfMiMdAJBb6flHFkvyg3WdwjQBnJSRo49n9zb_slbmDrvvO3hTLxsg/s200/fedora.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjue7IBBrKkv5ljNv2QFIMdsXKhIC_YBNtsGMe70ONQ61qA_zRqk-p_XQN4UNcQtE0zG-kFQ7iynHoUp8yuIfg0L_1X3rP2GfoYmuiTwIPc4-rNjyBBrhaWvlU0IlDtySvYj8gk3Q/s200/Mono-gorilla-aqua.32px.png)
FAQ [1] によると、Mono はスペイン語で猿の意味で、We like monkeys とあります。ロゴはゴリラをデザインしたもののようです。
Mono を利用すると、クロスプラットフォーム間(ここでは Linux と Windows)で簡単に同一の GUI アプリケーションを動作させることができそうです。
自宅では Linux、会社では Windows(しかもいまだに Windows XP)を使っているので、手軽に双方で動作するアプリケーションを Linux で開発するのであれば、Mono はまさにピッタリの開発環境です。MinGW クロスコンパイル環境よりもお手軽な感すらあります。
そこで、(C# 使いの Windows ユーザの方にとっては「今更」な感があるでしょうが)Windows 上で動作させることを意識した Mono の GUI プログラミングについて、調べた結果をまとめていきたいと思います。
最初は Hello World
まずは、おきまりの Hello World プログラムで動作確認です。当面は C# を使います。以下のソースを hello.cs として適当な場所に保存しておきます。
using System;
using System.Windows.Forms;
class HelloWorldApp {
public static void Main() {
MessageBox.Show("こんにちは、世界!", "mono");
}
}
mono のインストール
乱暴な方法ですが、私は以下のように mono- で始まるパッケージ(と関連するパッケージ)を全部インストールしてしまっています。使用している Linux は Fedora 13、mono のバージョンは 2.6.4 です。
$ su
パスワード:
# yum install mono-*
読み込んだプラグイン:presto, refresh-packagekit
...
(以下省略)
C# コンパイラとビルド
Mono 2.6.4 で利用できる C# コンパイラは以下の 4 種類です。[2]
mcs: compiler to target 1.1 runtime (to be deprecated with Mono 2.8).
gmcs: compiler to target the 2.0 runtime.
smcs: compiler to target the 2.1 runtime, to build Moonlight applications.
dmcs: the C# 4.0 compiler, and references the 4.0 runtime.
ここでは gmcs を使い、次のように hello.cs をビルド・実行します。
$ gmcs -pkg:dotnet -target:winexe hello.cs
$ mono hello.exe
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiemRJTp3TOmsCSXGxtXNnMj-VUwJ_nuiUb8BCmVRe-FZgO6LrvG9zhMZnruhyNX7ENUhNvsGNQuh-hR-bCL-nKTNCeNDkJds5wUnP9cfaBpdt4IQDfo0Qvf3sYkX1Jc1avOylHuw/s320/hello.png)
コンパイルの際、-target:winexe を省略すると、Windows 上で実行した時に、コマンドプロンプトのウィンドウも表示されます。
同じく Linux 上の Wine で実行した結果を以下に示しました。
$ wine hello.exe
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgh2wrT7ZXwBjdr6XOHhXc6n572ltmCJHAw_CcMIdPhzKMQBUOzZE5mWLjzH4aDGACt_1IaGUleB45D9U6jZHD_PLE6-Q2fIKhhXomrgV3YQTzXt2baWR7MYKnrBUFQezqChh-W-Q/s320/hello_wine.png)
Wine には .Net Framework 2.0 をインストールしています。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg92bIuS7d4dlbGYCIjgOgzDqYJctv847wmdAdND0ldwVnRVQifi0lPBvbWLXD9q3hQKWYZsdu-NAvy6noS1wgXuWJ37YlWK35x1ZHqbF0zn1psKoFFWcPAHGJPD53hKzb2sFi1fQ/s280/dotnet_wine.png)
Windows XP へ hello.exe をコピーして実行した結果は以下の様になります。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhe0SbCbb9BwI4lXCCGAiUrodJHSfWlwdxtzbxQZKvslUlVA4Qb6esppV42wd9EmQjEyyYqgpuNUJbvnXBiqMXfJ3Cw8jbhLjXjFl6yS0oQN-A4NVVSW6VNoYHd26jkg7xZsGlT0A/s320/hello_xp.png)
ちなみに XP では .Net Framework 3.5 までインストールされています。そのため、今のところ gmcs を使っていれば十分のようです。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhB9hjJqHEQcXWaRQDHeKv-_1mE66O2WA-u9axweam5Nk9ZRL9f-R9btwd5c-d2tIjeUFDHlZV5cidZ_hWk5E_g4uZJ9CNkbKnf-yr-Mr-cpO_UjoQ72TUKX59b0TmJ5PE_L-8EXw/s280/dotnet_xp.png)
参考サイト
[1] FAQ: General - Mono
[2] CSharp Compiler - Mono
【注記】情報が古くなりましたので、下記で内容を更新しました。
0 件のコメント:
コメントを投稿