(36) Small Basic の機能拡張

Ⅰ. VB で Small Basic 用拡張機能作成手順 まとめ
  1. クラスライブラリテンプレートを使う。
  2. クラスではなく、モジュールを使う。
  3. SmallBasicLibrary.dll を参照設定する。
  4. コーディングする。<SmallBasicType()> 属性と Primitive 型に留意。
  5. リリースビルドする。
  6. Small Basic フォルダにlibフォルダを作成、.dllと.xmlをコピー。
  7. Small Basic を起動。→ OK
Ⅱ. 前振り

えー、元ネタはこちらなわけですが。

   Small Basic : Extending Small Basic

Small Basic の機能拡張だってのに、何が悲しくて C# で作らなければならんのかと。
Basic には Basic だろうと。

というわけで、Visual Basic 使って簡単に機能拡張をやってしまえと。思ってみたわけですよ。

Ⅲ. 準備

必要なソフトウェアは以下のとおり。

  Small Basic
  ダウンロードの詳細 : .NET Framework 3.5 Service Pack 1
  Visual Studio 2008 Express Editions

Small Basic v0.3.1 は、.NET Framework 3.5 SP1 が必須です。 VB は Express Edition でも大丈夫です。

Ⅳ. 作成
  1. まず、VBで [新しいプロジェクト]-[クラスライブラリ] を選択し、適当なプロジェクト名を付けて [OK]ボタンをクリックします。

  2. プロジェクトができあがったらクラス Class1 を削除し、

    Small Basic のオブジェクト名にしたい名称で、モジュールを追加します。

    今回は、「SalvExtension」というオブジェクト名にしてみました。  

  3. Small Basic とインタフェースを取れるように、SmallBasicLibrary.dll を参照設定します。

    SmallBasicLibrary.dll は .NET Framework ライブラリではないので、直接ファイルを選択してやる必要があります。 Small Basic は、デフォルトでは C:\Program Files\MicroSoft\Small Basic にインストールされますので、このフォルダの中の SmallBasicLibrary.dll を選択してやればいいわけですね。

  4. さて、いよいよコーディングです。最初に、4. で参照設定した SmallBasicLibrary.dll を名前空間抜きで使えるように Imports します。 長ったらしい フル名称が好きな方は、ここは飛ばしてもかまいません。
    Imports Microsoft.SmallBasic.Library

    次に、Small Basic の中に組み込みたいオブジェクトに「SmallBasicType」属性を指定します。ついでにそのオブジェクトのアクセスレベルを Public にしておきます。

    <SmallBasicType()> _
    Module SalvObject
    
    End Module

  5. 実際のメソッドは、特に拡張機能であることを意識せずにふつーに記述できます。
    Public Property SalvProperty() As Primitive
        Get
            Return _SalvProperty
        End Get
        Set(ByVal value As Primitive)
            _SalvProperty = value
        End Set
    End Property

    ひとつだけ気をつけておくことは、

    Small Basic が持つ変数の型は「Primitive」のみ

    ということです。ですから、メソッドのパラメータも戻り値もすべて Primitive 型である必要があります。

    Public Function SalvMethod(ByVal para1 As Primitive) As Primitive
    
        Dim work As Integer = CType(para1, Integer)
        Return work * 2
    
    End Function

  6. ひと通りできあがったら[ファイル]-[すべてを保存]で、適当なフォルダにソース一式を保存します。  
  7. Release(リリース)ビルドします。ビルドされた結果は、6. の保存フォルダの下 bin\Release に保存されます。

ちなみに。 VB IDEの現時点のビルド構成がわからない場合は、[ビルド]-[構成マネージャ]の「アクティブソリューション構成」で確認/変更できます。

Ⅴ. 組み込み

できあがった機能拡張 dll を、Small Basic に組み込みます。 とは言っても手順は大変簡単で。 Small Basic のインストール先フォルダ(デフォルトでは C:\Program Files\Microsoft\Small Basic)に「lib」フォルダを作成し、そこに Ⅳ. で作った dll ファイルと xml ファイルをコピーするだけです。

Ⅵ. 確認

では、Small Basic を起動して、IntelliSense を確認してみましょう。

おおっ、ちゃんと先ほど作成した SalvObject オブジェクトが選択できるようになっています。

プロパティが候補表示されている場合は、xml コメントの summary 部分が説明として表示されます。 てことで、

' プロパティの確認
SalvObject.SalvProperty = 10
TextWindow.WriteLine("SalvProperty = " + SalvObject.SalvProperty)

MSH272

こんな感じでサンプルを作ってみて実行。

おおお、ちゃんと SalvProperty に格納した値が表示されるよ! では、メソッドはどうでしょう。

こちらは右の説明エリアに、構文・パラメータ・戻り値の説明までちゃんと表示されます。こいつは楽しい。

' メソッドの確認
result = SalvObject.SalvMethod(10)
TextWindow.WriteLine("SalvMethod Result = " + result)

MSH272-0

OKOK、ちゃんと引数の倍の数が返ってきます。 ちなみに。 Small Basicのサンプルソース直後のコード("MSH272"とか)は、v0.3 からの新機能「Publish ID」です。 Small Basic IDEの「Import」ボタンを押してこのコードを入力すると、直接ソースを取込表示してくれる便利ものです。

Ⅶ. まとめ

あんまり簡単に実装できたのでびっくりしましたよほんとにもう。 Small Basic 側のオブジェクトとのやり取りやイベントのフックなど、まだいろいろ調べないばなんないこともあるんですが。とりあえず、基本的な手順ということで。 けっこういろんなことができそうな気がしてきましたよ。

Ⅷ. 先達

本家米国 msdn Forum では、すでに有志の手によりさまざまな拡張機能が公開されています。ソースを読み込んでいろいろ調べてみるのもおもしろいかもしれません。

 ‘Shapes’, ‘Eval’, ‘DotNet Interop’, … : An extension for Small Basic : Small Basic : DevLabs : MSDN Forums (VB)
Extension to play music in Small Basic : Small Basic : DevLabs : MSDN Forums (C#)
Extension with Exponent function and GetCurrentDirectory function : Small Basic : DevLabs : MSDN Forums (C#)
Shameless self-promotion : Small Basic : DevLabs : MSDN Forums (VB, C#)
TextWindow.Clear ? : Small Basic : DevLabs : MSDN Forums (C#)

1 コメント

  1. さるべーじ より:

    拡張 DLL は Small Basic のバージョンごとに別コンパイルする必要がある、というスレッドがいくつか上がっていたのでメモ。

    v0.2 の SmallBasicLibrary.DLL を参照設定してコンパイルかけた DLL は、v0.3 では、前提となる SmallBasicLibrary.DLL の構造が違うためにエラーになります、と。
    v0.3 で動作する拡張 DLL を作りたければ、別途 v0.3 の SmallBasicLibrary.DLL を参照設定してコンパイルする必要があります、と。

    言われりゃなんてことはないんですが、なんか忘れがち→困りがちになりそうなので注意、と。

    Including libraries problem : Small Basic : DevLabs : MSDN Forums
    extensions doesn’t work : Small Basic : DevLabs : MSDN Forums

コメントを投稿