SWIG を使ってみよう! [第7回] C# 編(Windows版)2008年11月21日 21時40分43秒

SWIG を使って libnmz の様々な言語用のバインディングを作成してみましょう。

今回は Windows 環境で C# から libnmz の nmz_get_version を呼び出すことを考えます。

モジュール名は前回と同じ Sample とします。 SWIG 用インターフェイスファイルを Sample.i という名前で作成します。 中身は前回と全く同じです。

%module Sample
%{
#include "namazu/libnamazu.h"
%}
char *nmz_get_version();

swig コマンドを使ってラッパ用コードを生成します。 今回は C# 用ですので引数に -csharp を指定します。

C:\> swig -csharp Sample.i

実行すると C# 用の Sample_wrap.c と Sample.cs, SamplePINVOKE.cs が生成されます。

コマンドラインでコンパイルを行うため vsvars32.bat を実行します。

C:\> "\Program Files\Microsoft Visual Studio 8\VC\bin\vsvars32.bat"

次に Sample_wrap.c をコンパイルします。

C:\> cl /LD Sample_wrap.c  /I c:\namazu\include
     /link /OUT:Sample.dll C:\namazu\lib\nmz.lib

Sample.dll が作成されました。csc を使って Sample.netmodule を作成します。

C:\> csc /t:module Sample.cs SamplePINVOKE.cs

ここではカレントディレクトリに生成したモジュールをそのまま使ってみましょう。

Sample モジュールを呼び出す C# プログラム を main.cs という名前で作成します。

using System;

namespace Namazu
{
    class Program
    {
        static void Main(string[] args)
        {
            System.Console.WriteLine(Sample.nmz_get_version());
        }
    }
}

このプログラムは nmz_get_version の値を表示するだけの単純なプログラムです。 コンパイルして main.exe を生成します。

C:\>csc /addmodule:Sample.netmodule main.cs

実行すると、Namazu のバージョンが表示されます。 (プログラムはローカルのHDDに置いてください。 デフォルトでは、ネットワークドライブに置いたプログラムは実行時にセキュリティに引っ掛かり例外エラーが発生します。)

C:\> main
2.0.18

非常に簡単な例ですが、SWIG を使って libnmz(nmz.dll) を C# から利用する方法をしめしました。 モジュールの生成方法は各言語ごとに異なりますが、 Perl の時に使ったものと同じインタフェースファイルから作成できることが分かったかと思います。 他の言語でも同じように利用することができますので、いろいろと工夫してみてください。

ここでは紹介しませんが、Mono C#コンパイラ を使うことで UNIX 環境でも C# のプログラムから libnmz を利用することはできると思います。応用してみてください。

[お断り]

  • SWIG Version 1.3.36 を使用しました。
  • Namazu 2.0.18 を使用しました。(libnmz2.0.18.003-win32.zip に含まれる nmz.dll を使用)
  • Microsoft Visual C++ 2005 SP1 を使用しました。
  • Microsoft .NET Framework v2.0.50727 を使用しました。
  • libnmz は GPL ライセンスです。libnmz を動的であれ、静的であれリンクして使用するプログラムは GPL ライセンスと矛盾しないライセンスである必要があります。
  • SWIG を用いて作成した Sample モジュールは libnmz をリンクしますので、GPL ラインセンスとして公開します。
  • Sample モジュールは GPL ライセンスですので、Sample モジュールを利用するプログラムは GPL ライセンスと矛盾しないライセンスでなければなりません。ご注意ください。

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://namazu.asablo.jp/blog/2008/11/21/3969642/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。