指向性メモ::2007-03-29

ページ情報
制作日
2007-03-29T17:41:53+09:00
最終更新日
2007-03-29T22:36:28+09:00

A#とVisualStudio2005による.NETプログラミング・インストール編

Created:
2007-03-29T17:41:53+09:00

触発されてプレゼンツールを作ろうと思ったのだが、Ruby CLRを使うと確実にシベリア行きという事なので、Adaで書くことにした。AdaでWindowsのGUIを構築する場合、AdaGTK+をつかうのが一般的である。がしかし、WindowsでGTK+を使うのは今一しっくりこない上、IDEが整備されていないという問題があるので、できれば他の方法で実装したいところである。というわけで、A#による.NET Frameworkアプリケーションを作ることにした。いつの間にやらVS2005上で開発できるようになっているので、IDEもばっちりだ。

さて、まずはインストールからだ。A#のコンパイルに必要な全てのものはSourceForge.netからダウンロードできる。まず最初にmgnat20060606.zipをダウンロードして、unzipする。展開先はどこでも良いのだが、C:\mgnatに入れておくのが一般的らしい(C:\mgnat\README.txtが存在するように配置する)。次に、asharp-setup20060606.exeをダウンロードして実行する。インストール先は「C:\」のままにしておこう、気を利かせて「C:\mgnat」にすると逆に変なことになる。このファイルにより、必要な環境変数の設定やソースコードのコンパイルが行われる。mgnatを展開するときに、なんとなく嫌な予感を感じた場合、それが現実になるのもこの段階だ。4000近いファイルがコンパイルされるので、Rubyで実装していればアプリケーションが完成してしまうぐらいの時間がかかる。辛抱強く待とう。

無事asharp-setup20060606.exeが終了したら、環境変数のPATHを確認しよう。\「C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\」が追加されていないはずなので、足しておく。これがないと、後でVS2005を起動したときにエラーが起きて、ググっても何も情報が出てこない現実に絶望することになる。

最後にVS2005にA#の環境を統合するために、vs_integration20060606.exeをダウンロードして実行しよう。特に難しいことは無いはずだ。ただし、プログレスバーが一杯になった状態でものすごく待たされるので、それは覚悟しておく必要がある。

ここまで来れば後はVS2005を立ち上げて、新しいプロジェクトを作るだけだ。Ada for .NET (A#)が選択できるようになっている。取り敢えずは、with Ada.Text_IO;を入力してみよう。強力な補完機能に感動できるはずだ。

Comments
0
Trackbacks
0
PermaLink
http://yudai.arielworks.com/memo/2007/03/29/174153

A#とVisualStudio2005による.NETプログラミング・Formを作ってみる編

Created:
2007-03-29T22:36:28+09:00

インストールができたので、コーディングに移る。基本的にはAda05と.NET Frameworkの合わせ技だ。

.NET FrameworkのSystem名前空間は、ここではMSSystになる。それ以下は同じなので、必要に応じてwithする。とりあえず、プレゼンテーションツールなので、画面を最大化したウィンドウを作ってみよう。Ada@WCIMHも参照のこと。

Steady_Talk.adb (as Main)
with Main_Form;
with MSSyst.Windows.Forms.Application;
procedure Steady_Talk is
  pragma Linker_Options("-subsystem=2");
begin
  Mssyst.Windows.Forms.Application.Run(Main_Form.new_Main_Form);
end Steady_Talk;
Main_Form.ads
with MSSyst.String;
with MSSyst.Windows.Forms.Form;
package Main_Form is
  type Typ is new MSSyst.Windows.Forms.Form.Typ with null record;
  type Ref is access all Typ'Class;
  function new_Main_Form(This : Ref := null) return Ref;
  pragma MSIL_Constructor(new_Main_Form);
end Main_Form;
Main_Form.adb
with MSSyst.Windows.Forms.FormBorderStyle;
with MSSyst.Windows.Forms.FormWindowState;
with MSSyst.Windows.Forms.Control;
with MSSyst.Windows.Forms.Control.ControlCollection;
with MSSyst.Windows.Forms.Label;
with MSSyst.Drawing.Font;
with MSSyst.Drawing.Color;

package body Main_Form is
  function new_Main_Form(This : Ref := null) return Ref is
    use type MSSyst.String.Ref;
    Super : MSSyst.Windows.Forms.Form.Ref := MSSyst.Windows.Forms.Form.new_Form(MSSyst.Windows.Forms.Form.Ref(This));
    Label : MSSyst.Windows.Forms.Label.Ref;
    Label_Font : MSSyst.Drawing.Font.Ref;
  begin
    -- 適当に最大化して背景色を変えてみたり
    This.set_Text("Steady Talk");
    This.set_BackColor(MSSyst.Drawing.Color.get_Orange);
    This.set_Opacity(0.9);
    This.set_FormBorderStyle(MSSyst.Windows.Forms.FormBorderStyle.None);
    This.set_WindowState(MSSyst.Windows.Forms.FormWindowState.Maximized);

    -- とりあえず文字を入れてみる。
    Label := MSSyst.Windows.Forms.Label.new_Label;
    Label.set_Text("Hello world!");

    -- フォントを変えたいんだけどクラッシュする
--  Label_Font := MSSyst.Drawing.Font.new_Font(This => null, prototype => Label.get_Font, newStyle => Label.get_Font.get_Style);
--  Label.set_Font(Label_Font);
    
    -- This.get_Controls.Add(L)だとエラーになる
    MSSyst.Windows.Forms.Control.ControlCollection.Add(This.get_Controls, Label);

    return This;
  end;
end Main_Form;

これで何となく動いている。やってみた感じ、そこまでアクロバティックな事は要求されなかった。2003年より進化している様に見える。

しかし、MSSyst.Drawing.Fontのインスタンスを作ろうと思ったら、コンパイラがクラッシュした。メッセージ的には以下の通りだが、その部分を読んでみても詳しいことは分からなかった。

4.01p (20060112) (.NET VM) Assert_Failure jvm-info.adb:301
Error detected at main_form.adb:23:121

面倒なのでGDIを使おう。

Comments
0
Trackbacks
0
PermaLink
http://yudai.arielworks.com/memo/2007/03/29/223628
連絡先、リンク、転載や複製などについては『サイト案内』をご覧ください。Powered by HIMMEL

I ♥ Validator