XOPの作り方

(XOP toolkitとMicrosoft Visual C++ 6.0を用いて)

by Tsuyoshi Inoue

XOPは、Igor Proに自分なりの関数を組み込むシステムです。 なかなか壁が高そうですが、いったん動いてしまえば、手軽で便利なシステムです。 作り方は、基本的にはXOPのマニュアルに書いてあるのですが、 その通りには行かない部分もあります。 以下はXOP作り方の押さえるべき要点をまとめたものです。

  1. Visual C++でプロジェクトを作成。

    具体的には、ファイル->新規作成->Win32Dynamic Link Libraryを選び、名前と保存ディレクトリを名前をつけ、そんで新規にワークスペースを作成をチェック、Win32プラットフォームを選択する

    そして次に 空のDLLプロジェクトを選ぶ
  2. 必要なソースファイル、ヘッダファイル、XOPresource.rc を新しくできたディレクトリにコピーする。

    必要なファイルのリストは下記の通り。
    ・main.cpp (エントリポイント、select case とか xop 特異的なソースファイル)
    ・xop_header.h
    ・xop_resource.rc (この二つはxop 関数を定義するところ)
    ・resource.h
    ・resource.rc (ここはバージョン情報のリソースが入ってる)

    それ以外に必要なものがあれば含めること。

  3. プロジェクト->プロジェクトへ追加 -> ファイル でこれらのファイルをプロジェクトに加える。

    ただし .rc ファイルはひとつしか入れることができない。それゆえ resource.rc しか加えたらだめ。xop_resource.rc は加えたらいけない。これ の加え方は後で述べる。つまり4つのファイルを加える。
  4. 次に xop 専用の初期設定をする。

    プロジェクト -> 設定 を選ぶとタブベースの設定が出てくる。

    a, まず左側にあるツリーでワークスペースをフォーカスして(ファイルとかでなく)、次に 左上の Setting For を "All Configuration" にする。

    b, デバッグ ->一般l….. デバッグセッションの実行可能ファイルで Igor.exe へのフルパスを指定

    c, C/C++ -> コード生成 ->使用するランタイム ライブラリ: シングルスレッド* を選択

      -> 構造体メンバのアライメントは、2 byte を選択

      ->プリプロセッサ -> インクルードファイルのバスは、XOPsupportディレクトリへのフルパス(ここにXOPのすべてがある)

    d, リンク -> 一般 ->出力ファイル名: Debug/希望ファイル名.xop とする(Debug/ は相対パス指定)

      -> オブジェクト/ライブラリモジュール のところにはversion.lib を加える

      -> インプット ->無視するライブラリ: libcd.lib をignore する

    e, リソース -> インクルードファイルのパスにはXOPsupportディレクトリへのフルパス

    ・ ・・・・そしてOKを押す

  5. ビルド->アクティブな構成の設定 -> Win32debug をえらぶ。
  6. プロジェクト->プロジェクトへ追加->ファイル から XOPsupport の中にある
    IGOR.lib と XOPSupport x86.lib を加える

  7. XOP用リソースファイル (xop_resource.rc) は resource.rc とかぶるため(二つ以上のリソースファイルはプロジェクトに含めることができない)、以下のようにしてインクルードする

    表示->インクルードファイルの設定-> コンパイル時に追加するファイル に include "xop_resource.rc" と加えることによって達成される(これを設定するときに文句をいってくるが無視してよい)

    これで終了。

  8. あとこれは超超注意!!!

    ・ ・・・関数の加え方・・・・・・・

    static library を作るとき、最初通常のライブラリを作ったあと、 Igor_XOP 用のライブラリを作る。そのIGOR_XOP用のライブラリを作るときのパネルの設定でC/C++ pane の Code Generation において Struct Member alignment を絶対にここも 2-byte にしないとだめ。(構造体を使ったライブラリではすべてバグる)