2

Monoで.NETアプリをLinux/Macで動かす

Monoはオープンソースの.NET Framework互換ランタイム。俺はUbuntuやMac OSXで自分の作ったWindowsアプリを動かすのに使っている。

Ubuntuのaptでインストールできるバージョンは2.1、Macのmacportsでは2.4がインストールできるが、Macだけはmono-projectからdmgダウンロードしてきてインストールして使ってる。


ちゃんとGUIも再現される。下はWindowsとVMWare上のUbuntuで同じアプリを起動したところ
C# – UDP/IPでチャットアプリより)
UDPの勉強


■アプリを起動する

mono App.exe
で起動する。DLLなども問題なく読み込まれる。


■Monoで動くように実装するポイント
Mono2.xは.NET Framework2.0と3.0の間ぐらいまで実装されているらしい。
  • DirectXは動かない、というか無い
  • Win32APIももちろん無いので使わない
  • 設定はレジストリではなく.configファイルに保存しよう
  • .NET3.0以降で増えた関数型言語由来の機能はあまり使わない方がいい。ラムダ式とか。
  • delegateやthreadは使える
  • Genericsのマイナーなメソッドは使わない。普通にAddとかRemoveとか使う分にはいいが、高階関数を使ってそうな機能(ソートとか)はあまり触らない方がいい
  • ディレクトリの区切り文字は \ ではなく Path.DirectorySeparatorChar を使う
  • 起動ディレクトリの取得は Application.StartupPath ではなく
    System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
    を使うと、System.Windows.Formsを読み込まなくても済む
基本的にWindowsネイティブな機能を使わないようにしていれば、Generics関連のメソッドが無い以外で困ったことは多分ない。


■開発の手順
  1. WindowsのVisualStudioで開発する。
  2. Monoで動くか確かめるために、VMWareでUbuntuを起動する。
  3. Dokan SSHFSでUbuntuのディスクをマウントする
  4. 適当にコードを書く。Windowsで問題なく動くところまで確認する。
  5. マウントしたディスクにRealSyncで転送する
  6. Ubuntuでも動かしてみる。デバッグの方法がよくわからない。特にMonoで実装されていない関数を実行してしまった時は原因特定に時間がかかってしまう・・・
  7. Ubuntuのapt版Monoで動けばmacportsのMonoでも動く。バージョンが高いので。

0

Serial2SendKeys ver 1.00公開

昨日作りました。

WindowsにはSendKeysという機能があって、仮想的にキーボードを操作する事ができます。

Serial2SendKeysは、シリアル通信から受信したテキストに基づいて、キーボードを操作するproxyプログラムです。

Serial2SendKeys

つまりこれを使うと、マイコンからシリアル通信で

Serial.println(“zanmai!{ENTER}%{TAB}”);

と送るだけで、パソコン側のアクティブな画面に「zanmai!」と打ち込まれ、エンターキーが押され、さらにAlt+Tabでウィンドウが切り替ります。(上はArduinoの例)

FNCCも便利だけど、ほとんど全てのプログラミング言語はキーイベントの取得ができるのでSerial2SendKeysの方が楽な場合が多いでしょう。

また、LivedoorReaderなどを電子工作とマッシュアップする事も簡単です。

(ただしパソコンからマイコンへの送信はできません)

■ダウンロード

Serial2Sendkeys ver.1.00

Source Code (VisualStudio2005pro+C#2.0)

archive

Read more