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

ページ情報
制作日
2007-03-31T08:35:00+09:00
最終更新日
2007-03-31T13:40:44+09:00

A#とVisualStudio2005による.NETプログラミング・コンパイラクラッシュ回避編

Created:
2007-03-31T08:35:00+09:00

コンパイラがクラッシュするのはどうもwithが原因のようだ。そういえば前にAda05で遊んでいたときも、limited withなんかで複雑な参照を行うとコンパイラがクラッシュすることがあった。

回避策としては、ソース内に現れる型を含むパッケージをwithするのが良いようだ。たとえば、

with Mssyst.Drawing.Brushes;
...
Foo.new_Foo(brush => Mssyst.Drawing.Brushes.get_Black);

のようなコードを書くときは、get_Blackで渡される型を含むパッケージであるMssyst.Drawing.Brushも一緒にwithしておくとよい。

with Mssyst.Drawing.Brush;

似たような状況は恐らくいくつかの場面で見られると思う。コンパイラが落ちたらとりあえず必要そうな型をwithしてみると良いだろう。

Comments
0
Trackbacks
0
PermaLink
http://yudai.arielworks.com/memo/2007/03/31/083500

A#とVisualStudio2005による.NETプログラミング・日本語編

Created:
2007-03-31T10:53:30+09:00

MSSyst.String.adsをよく読んでみると、次の定義がある。

   function new_String(
      This : Ref := null;
      c : Wide_Character;
      count : Integer) return Ref;

+が定義されているのはString型だけなので、Wide文字列を変換する場合、どうやらこの方法しかないらしい。コードにすると次のような感じだ。

Mssyst.String.new_String(c => Wide_Character'('ほ'), count => 1)

コードはこれでよいとして、問題はコンパイラだ。ファイルがShift-JISなので、コンパイルオプションに-gnatWsを付けてコンパイルしてみたところ、依然文字化けする。pragma Wide_Character_Encodingなども試してみたが、どうもうまくいかない。仕方が無いのでファイルをUTF-8に変換し、コンパイラオプションを-gnatW8に変更してみたところ、なんとかうまく表示することができた。ShiftJISはもしかすると未実装なのかもしれない。

とりあえず、日本語は通るようになったが、これではさすがに面倒だ。要望として作者に伝えるべきなのか、それとも、他にもっと良い方法が存在するのか。うーん。

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

I ♥ Validator