TIPS > VC6とSWIGでC++のDLL利用

作成中

概要


ここではVisual C++ 6.0とSWIGを用いてC++のクラスを公開しているDLLを利用する手順についてメモします。

環境


手順では以下の環境で動作を確認しています。
  • OS : Windows 2000 SP4
  • SWIG : swigwin-1.3.40
  • Visual C++ 6.0 (SPなし)
  • Ruby : ruby 1.8.6 i386-mswin32

手順


1. SWIGの導入

  1. 公式サイトからSWIGをダウンロードします。
  2. 解凍してswig.exeのある場所にパスを通します。

2. DLLの用意

今回は、以下のようなC++のクラスを公開するDLLを用意しました。

3. SWIGでコードを作成

  1. 上記のTestIF.hをSWIGが解析できるようにします。具体的にはDllExportの記述を削除します。
  2. swig -ruby -c++ TestIF.i

4. DLLのラッパーDLLを作成

rubyTestDLL.dllで公開しているC++のクラスをrubyで使うためのラッパーDLL(拡張ライブラリ)を作成します。
手順は以下となります。
  1. VC6でWin32 Dynamic-Link Librayプロジェクトを新規作成
  2. プロジェクト作成時の「作成するプロジェクト」で「単純なDLLプロジェクト」選択
  3. SWIGで生成されたcxxファイルをプロジェクトに追加
  4. 「プロジェクトの設定」の「C/C++」の「プリプロセッサ」の「インクルードファイルのパス」に以下を設定
    1. [rubyのインストールパス]\lib\ruby\1.8\i386-mswin32
    2. 上記のTestIF.hがある位置
  5. 「プロジェクトの設定」の「リンク」の「インプット」で以下のlibファイルを指定
    1. [rubyのインストールパス]\lib\msvcrt-ruby18.lib
    2. 上記のrubyTestDLL.lib
  6. ビルド実行

5. 作成した拡張ライブラリをテスト

  • 上記のrubyTestDLL.dllとrubyTestDLLWrp.dllをカレントディレクトリにおいて以下のコードを実行しました。

- テストコード
require 'rubyTestDLLWrp'
 
wrp = rubyTestDLLWrp::TestIF.new
p wrp.plus_int(3, 4)
p wrp.plus_char("test", "value")
 
最終更新:2009年10月19日 21:27