久々に Windows を使っているけど IronPython が遅すぎる。
コンパイル不要でライブラリも .NET がほぼフルで使えるので困らないし何より簡単。
なのはいいのだけれど、DLR 初期化が遅すぎて道具として使う気にならない。
地味に小物ツールを作っているんだけれど使わない…
コンパイルするなら C# で作ったほうが楽だし Web 上の Tip’s も C# なら桁違い。
それより何より Windows 7 なら何もインストールせずに C# がビルドできる。
なんか IronPython も将来性が不安な雰囲気だし。
米Microsoft、IronRubyおよびIronPythonをコミュニティに移管 – SourceForge.JP Magazine : オープンソースの話題満載
もう Windows は C# を主に利用するほうが懸命かと。
SeeMe も次で C# に戻すか考えなければ。
ということで今回は VisualStudio 等を一切使わずに WPF ウインドウを作る方法を。
VisualStudio を使ったほうが簡単だ!と言わない。
Linux ばかり使っている人間はテキストエディタとコンソールのほうが楽なんじゃい。
小物のツールを作るのに統合開発環境なんてバカな話だ。
本音は Visual C# だかの無償開発環境をインストールして何も作れない人を馬鹿にしたいから。
Microsoft.Win32.OpenFileDialog for .NET 4.0
IronPython は clr.AddReferenceByPartialName() メソッドでアセンブリ参照の追加ができた。
けど C# は同じようにコードでアセンブリ参照を追加する方法が見つからない。
というかコンパイル時に厳しい文法チェックを行う C# ではソレは無理なのかな。
素直にコンパイラオプションで参照する方法を MSDN で探す。
C# Compiler Options Listed by Category
/reference オプションを利用するだけなのか。
アイコンも /win32icon オプションだけで指定できる、VC++ より簡単だ。
引数が多くて長いのでバッチを作ったほうが楽だね。
build.bat
C:\Windows\Microsoft.NET\Framework64\v3.5\csc.exe ^ /reference:PresentationCore.dll ^ /reference:PresentationFramework.dll ^ /reference:WindowsBase.dll ^ /target:winexe ^ /out:net35wpf.exe ^ /win32icon:777.ico ^ /optimize+ ^ wpf_win.cs PAUSE
この例は .NET 3.5 の csc.exe を使うのでフルパスを、32bit の人はパスを書き換えてね。
^ を利用すればインラインなコマンドを改行できる、bash は \ だけど。
最後に PAUSE と書けば *.bat の W クリックでコンソールが閉じないのでお勧め。
アイコンは勝手に用意して書き換えよろしく。
肝心な C# コードはせっかくなので Binding を使ってみた。
Main 関数に Single Thread Apartment 属性は必須なので忘れずに。
あ、BOM 付き UTF-8 で保存ね。
using System; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; class OreWin : Window { private TextBox _textbox; private TextBlock _textblock; public OreWin() { this.Title = "俺のういんどう!"; this.Width = 400; this.Height = 120; this.DataContext = _textbox; this.CreateControls(); // Binding var binding = new Binding("Text"); binding.Source = _textbox; _textblock.SetBinding(TextBlock.TextProperty, binding); } private void CreateControls() { _textbox = new TextBox(); _textblock = new TextBlock(); var label = new TextBlock(new Bold(new Run("何か書くと下にコピーされる"))); var stackpanel = new StackPanel(); // Append stackpanel.Children.Add(label); stackpanel.Children.Add(_textbox); stackpanel.Children.Add(_textblock); this.Content = stackpanel; } } class Test { // WPF 等では STA 属性必須! [STAThread] public static void Main(string[] args) { var win = new OreWin(); var app = new Application(); app.Run(win); } } //
Pascal & C++ 屋だった頃は勘違いしやすい var に否定的だったけど…
Python 屋になった後では var と書くのすら面倒臭くなってしまった。
つーかメンバアクセスに this を書かなければ気がすまなくなっているのが怖い。
new もウザい、セミコロンを忘れる、メンバ変数も this にくっつけ…(以下略
C# って何か中途半端な気がする、まあ従うだけだが。
とにかく build.bat を W クリックしてコンパイル。
アイコンを含めたコードも置いてみる。
よしよし、何もインストールしないでコンパイルできたぞと。
しかも起動はアッという間、IronPython をやっていたのが馬鹿馬鹿しい。
来年からはこんな感じで Windows でも小物を作っていきますか。
******************************
2010 年の反省、サイトもブログも更新歩度が下がり続けている。
ヤル気が無くなったわけではない、株を始めたので勉強に忙しいのです。
ちなみに今年のアフィリエイト収入は三千円ちょっと…
たった二十万円で始めた株は四ヶ月で一割強増えた…
当然のように株の更なる勉強と増資の日々に…
Linux プログラミング Blog なんてアホくさくてやってらんねぇ!
いくら Linux でのアプリ作りが主な記事の Blog だからってコレでは…
やはり Windows プログラミングをもう少し増やしたほうが良さそう。
というわけでまた来年。