C言語でのWSTP開発(Windows)

このドキュメントでは,Microsoft Windowsオペレーティングシステムを実行するコンピュータ上で,C言語で書かれたWolfram Symbolic Transfer Protocol (WSTP)プログラムをコンパイルし実行する方法を説明する.(「WSTPと外部プログラム通信」はWolfram言語とC言語の両方でWSTPプログラムを書く方法を記述したものである.)このドキュメントでは,WindowsにWSTPを実装する方法も解説する.
このドキュメントは,コンパイラや他の開発ツールの使い方を教えたり,C言語でのプログラミング方法やWindowsベースのコンピュータを使う一般的な方法を教えたりするものではない.少なくとも,ツールに付属の入門書はすでに読まれているものと仮定している.WSTPプログラムの構築や実行で問題がある場合は,このドキュメントの「トラブルシューティング」をご覧いただきたい.
このドキュメントで記述されていることの多くは,Windows独特のものである.別のプラットフォームでWSTPプログラムをコンパイルし実行する方法については,そのプラットフォームの開発者ガイドをご参照いただきたい.
はじめに
WSTPは動的にリンクされた共有ライブラリの集合として実装される.WSTPプログラムが起動すると,ディスク上の標準的な場所で,オペレーティングシステムによりロードされたメインの共有ライブラリが見付けられ,WSTP関数の呼出しが共有ライブラリ内のコードに向けられるようにクライアントWSTPプログラムに繋がれる.32ビットのWindowsオペレーティングシステム(2000, XP, Vista)を実行するコンピュータ上では,メインの共有ライブラリはwstp32i4.dllと呼ばれる.
64ビットのWindowsプラットフォーム(XP 64,Server 2003,Vista 64,Windows 7,Windows 8)では,64ビットWSTPプログラムのメインの共有ライブラリはwstp64i4.dll.である.
WSTPプログラムが構築されるときは,インポートライブラリ(.libファイル)が使われる.このインポートライブラリはプロジェクトファイルに加えられるか,makefileのリンクコマンドに含まれるかする.(このインポートライブラリにはコードは含まれていない.これはリンカーを満足するために,同じ関数名を共有ライブラリとしてエキスポートするだけである.)
WSTPのCインターフェースはヘッダファイルwstp.hで指定される.このファイルはWSTP共有ライブラリで関数を呼び出すすべてのCあるいはC++ソースファイルに含まれる.
WSTPプログラムが実行されるときにはWSTP共有ライブラリのwstp32i4.dllまたはwstp64i4.dllが必要であり,これらのファイルはWindowsオペレーティングシステムが見付けられるところになければならない.WSTPプログラムが構築されるときにはインポートライブラリとヘッダファイルが必要であり,これらはコンパイラとリンカーが見付けられるとことになければならない.これらのコンポーネントおよびその他のコンポーネントのインストールと使用方法に関しては以下で詳しく説明する.
サポートされる開発プラットフォーム
WSTPは共有ライブラリとして,Microsoftにより指定されたDLLに対する標準の呼出し慣習およびバイナリインターフェースに従ったどの開発環境とでも使うことができる.しかし,このドキュメントではMicrosoft C++開発環境を使って,WSTPを使うCプログラムの構築方法のみを説明する.
各開発環境は「プロジェクトドキュメント」という概念をサポートする.これは,ソースファイルとコンパイラ,リンカー,デバッガのオプションは,ダイアログボックスやその他のインタラクティブなインターフェース要素の集まりであるプロジェクトウィンドウを使って管理されるというものである.この統合開発環境(IDE)に加え,すべてのベンダーによりコマンドプロンプトから実行したりmakeユーティリティで起動したりできるツールが提供されている.
WSTPコンポーネントのインストール
このセクションではWSTP Developer KitからコンポーネントをインストールしてWSTPプログラムを構築し実行する方法を説明する.WSTP Developer KitはWolframシステムをインストールする際にハードドライブにコピーされる.
次の手順はWindows用のWSTP Developer Kitが,WolframシステムのインストーラによりC:\Program Files\Wolfram Research\Mathematica\11.0\SystemFiles\Links\WSTP\DeveloperKit\にインストールされているものと仮定している. Windowsでは,通常2つのDeveloper Kitがインストールされる.一つは32ビットのWindowsプラットフォーム用でWindowsというフォルダに,もう一つは64ビットのWindowsプラットフォーム用でWindows-x86-64というフォルダにインストールされる.Wolframシステムとは別のコンポーネントとしてDeveloper Kitを持っている場合は,フォルダWindowsまたはWindows-x86-64をハードドライブ(例:C:\WSTP)にコピーする.この場合,Developer Kitの場所に合わせて以下の手順を変更する必要がある.

推奨されるインストール

すべてのコンパイラへのSystemAdditionsのインストール

Wolframシステムのバージョン10.0では,WolframシステムがWindowsシステムにWSTP動的ライブラリを直接インストールすることがなくなった.WSTP開発者は,アプリケーションがdllsを見付けられるようなシステム上の場所に.自分でWSTP dllsを置く必要がある.
プログラムが開始したときにMicrosoftのオペレーティングシステムがどのようにプログラムのdllsを探すかについては,Microsoft Developer Networkをご参照いただきたい.

MicrosoftコンパイラへのCompilerAdditionsのインストール

Visual Studio 2012
以下の手順は,MicrosoftのVisual Studio 2012がディレクトリC:\Program Files\Microsoft Visual Studio 11\VCにインストールされているものと仮定する.これはDeveloper Studioのバージョン11.0のデフォルトディレクトリである.64ビットのWindowsシステムでは,デフォルトのVisual StudioのインストールはC:\Program Files (x86)\Microsoft Visual Studio 11\VCである.

1.  Mathematica内でWindows\CompilerAdditionsフォルダに移動する(64ビットのWindowsシステムでは,Windows-x86-64\CompilerAdditions\フォルダ).以下のコマンドを実行すると,これらのフォルダを含むウィンドウが開く.

explorerという単語はなくてもよいが,二重引用符は必要である.

2.  wstp32i4.lib,wstp32i4m.lib,wstp32i4s.libの各ファイルをC:\Program Files\Microsoft Visual Studio 11\VC\libにコピーする.64ビットのWindowsシステムでは,これらの名前はwstp64i4*となっている点に注意のこと.次にwstp.hをC:\Program Files\Microsoft Visual Studio 11\VC\includeにコピーする.最後にwsprep.exeをC:\Program Files\Microsoft Visual Studio 11\VC\binにコピーする.64ビットのWindowsシステムでは,コピー先のパスはそれぞれC:\Program Files (x86)\Microsoft Visual Studio 11\VC\lib\AMD64,C:\Program Files (x86)\Microsoft Visual Studio 11\VC\include,C:\Program Files (x86)\Microsoft Visual Studio 11\VC\binとなる.

Visual Studio 2010
以下の手順は,MicrosoftのVisual Studio 2010がディレクトリC:\Program Files\Microsoft Visual Studio 10\VCにインストールされているものと仮定する.これはDeveloper Studioのバージョン10.0のデフォルトディレクトリである.64ビットのWindowsシステムでは,デフォルトのVisual Studioのインストール先はC:\Program Files (x86)\Microsoft Visual Studio 10\VCである.

1.  Mathematica内でWindows\CompilerAdditionsフォルダに移動する(64ビットのWindowsシステムでは,Windows-x86-64\CompilerAdditions\フォルダ).以下のコマンドを実行すると,これらのフォルダを含むウィンドウが開く.

explorerという単語はなくてもよいが,二重引用符は必要である.

2.  wstp32i4.lib,wstp32i4m.lib,wstp32i4s.libの各ファイルをC:\Program Files\Microsoft Visual Studio 11\VC\libにコピーする.64ビットのWindowsシステムでは,これらの名前はwstp64i4*となっている点に注意のこと.次にwstp.hをC:\Program Files\Microsoft Visual Studio 11\VC\includeにコピーする.最後にwsprep.exeをC:\Program Files\Microsoft Visual Studio 11\VC\binにコピーする.64ビットのWindowsシステムでは,コピー先のパスはそれぞれC:\Program Files (x86)\Microsoft Visual Studio 11\VC\lib\AMD64,C:\Program Files (x86)\Microsoft Visual Studio 11\VC\include,C:\Program Files (x86)\Microsoft Visual Studio 11\VC\binとなる.

WSTP Developer Kitの要素

WSTPはオペレーティングシステムに依存しないコンポーネントと,オペレーティングシステムにより提供される通信メカニズムを直接利用するコンポーネントからなるレイヤソフトウェアシステムである.
システム非依存コンポーネントの主たる役割は,式をバイトの文字列として符号化することである.このソフトウェアはwstp32i4.dll(32ビットプログラム)およびwstp64i4.dll(64ビットプログラム)という共有ライブラリに実装されている.OS特定のコンポーネントの役割は,バイトを一つのプログラムから別のプログラムへと転送することである.このサービスにはいくつかの実装がある場合がある.それぞれの実装はWSTPデバイスと呼ばれる.

WSTPの共有ライブラリとヘッダファイル

次ではWindows用のWSTP Developer Kitに含まれる各ファイルおよびディレクトリについて説明する.これらのコンポーネントをインストールするためには「推奨されるインストール」セクションを参照されたい.
64ビットのWindowsプラットフォーム用のWSTP Developer Kitにも似たようなファイルが含まれているが,最大の違いはコンポーネントのファイル名である.32ビットのWindowsコンポコンポーネントにはコンポーネントファイル名に32が含まれており,64ビットバージョンのコンポーネントファイル名には64が含まれている.

SystemAdditionsディレクトリ

SystemAdditionsディレクトリのファイルは,WSTPを実装する共有ライブラリであり,通常WSTPプログラムが実行されるたびにシステムによって見付けられるような場所にインストールされる(これらのコンポーネントのインストールについては「推奨されるインストール」セクションを参照されたい).ほとんどのWSTPプログラムによって必要とされる共有ライブラリは,このディレクトリのトップレベルにある.32ビットのWindows用のファイルはwstp32i4.dllであり,64ビットのWindows用のファイルはwstp64i4.dllである.
wstp32i4.dll/wstp64i4.dll
wstp32i4.dllとwstp64i4.dllは32ビットのWSTP Windowsプログラム(64ビットのWSTP Windowsプログラムはwstp64i4.dllを使用)によって使われる共有ライブラリで,WSTPアプリケーションプログラムインターフェース(API)のInterface 4を実装する.これは,32ビットのWSTPプログラムが実行するときに,オペレーティングシステムのローダによって見付けられる場所になければならない.これは32ビットのWSTPプログラムを構築するためではなく実行するためだけに必要なものである.このファイルは構築されたWSTPプログラムの近くにでもWindowsシステムディレクトリの中にでも,PATH上のどこかにでも置くことができる.詳細および他のインストールオプションについては以下の説明をご覧いただきたい.
WSTPデバイス
すべてのWSTPデバイスは,それらが実装するプロトコルおよびそれらを使用するプログラムのタイプを記述する名前付けのスキームに従う.
SharedMemoryデバイス
SharedMemoryはプロセス間のデータを転送するためにWin32メモリマップファイルメカニズムが使うWSTPデバイスである.これはWolframシステム10.0では,ローカル接続のデフォルトのデバイスである.
例えば,以下のコード
を実行するCプログラムは,次を評価するWolfram言語プログラムに接続する.
TCPIPデバイス
Wolframシステム10.0では,TCPIPはリモート接続の推奨デバイスである.
例えば,以下のコード
を実行するCプログラムは,次を評価するWolfram言語プログラムに接続する.
ネットワーク上の異なるコンピュータ上で実行しているWSTPプログラムに接続するためには,LinkProtocol->"TCPIP"を使うことができる.
IntraProcessデバイス
IntraProcessは,同じプロセス内のスレッド間で使うために設計されたWSTPデバイスである.同一プロセス内の別のスレッドへの全二重WSTP接続が必要な場合に,このデバイスを利用する.
例えば,以下のコード
char* argv[] = {"-linkname", "abcdef_ipq", "-linkprotocol", "IntraProcess", "-linkmode", "connect"};
link = WSOpenArgv(stdenv, argv, argv + 6, 0);
を実行するCプログラムは,以下を実行する別のスレッドに接続する.
char *argv[] = {"-linkname", "abcdef_ipq", "-linkprotocol", "IntraProcess", "-linkmode", "listen"};
link = WSOpenArgv(stdenv, argv, argv + 6, 0);
IntraProcessは,別のプロセスで実行中のリンクに接続するためには使用できない.
FileMapデバイス
FileMapデバイスはWindowsでのみ使用できる,廃止されたLinkProtocolである.
例えば,以下のコード
を実行するCプログラムは,以下を評価するWolfram言語プログラムに接続する.
これらのデバイスは,LinkProtocolが一つも指定されていない場合にWSTPによってデフォルトで使われる.
64ビットのWindowsは"FileMap"プロトコルをサポートしない.
TCPデバイス
TCPデバイスはプロセス間でデータを転送するためにTCPインターネットプロトコルを使う,廃止されたLinkProtocolである.
例えば,以下のコード
を実行するCプログラムは,以下を評価するWolfram言語プログラムに接続する.
"TCP" LinkProtocolはネットワーク上の異なるコンピュータで実行してるWSTPプログラムに接続するのに使用することができる.
"TCP" LinkProtocolは Mathematica 5.1で廃止されたが,下位互換性のためにだけ存在している."TCP"のユーザは,"TCPIP"を使うようにコードを変換する必要がある.

CompilerAdditionsディレクトリ

Visual Studio 2012
CompilerAdditions\wstp.h
wstp.hはCあるいはC++のソースファイルに含まれなければならないヘッダファイルである.これはコンパイラによって見付けられる場所になければならない.このヘッダファイルは,それを含むソースファイルと同じディレクトリに置くこともできれば,開発ツールで提供された標準ヘッダファイルと同じ場所に置くこともできる.またはヘッダファイルの検索パスにwstp.hの場所を加えることもできる.これは通常コマンドラインスイッチ,環境変数,ダイアログボックスの設定を使って行われる.
CompilerAdditions\wstp*i*.lib
*.libファイルは,WSTP共有ライブラリのコードにある関数への参照を解決するために リンカーが使用するインポートライブラリである.これらの.libファイルのうちの一つがプロジェクトファイル,makefile,リンクコマンドラインで参照される.インポートライブラリの形式は標準化されていないので,最も人気の高い開発環境のそれぞれについて一つのインポートライブラリが提供されている.
wstp32i4m.libあるいはwstp64i4m.libはMicrosoft Visual Studioを含むMicrosoft C/C++開発ツールで使用されるインポートライブラリである.これはMicrosoftリンカーにより生成されるCOFFインポートライブラリである.このファイルはMicrosoftリンカーに見付けられるところに置かれなければならない.パスの指定を避けるためには,このファイルをC:\Program Files\Microsoft Visual Studio 11\VC\PlatformSDK\libディレクトリに置く.64ビットの.libファイルはC:\Program Files\Microsoft Visual Studio 11\VC\PlatformSDK\lib\AMD64ディレクトリに置く.
CompilerAdditions\wsprep.exe
wsprep.exeはテンプレートファイルを処理することによりWSTPプログラムが自動的に書き出す32ビットのコンソールプログラムである.これは開発ツールのBinディレクトリに置くと便利であろう.64ビットのWindowsでは,wsprep.exeは64ビットのコンソールプログラムである.
Visual Studio 2010
CompilerAdditions\wstp.h
wstp.hはCあるいはC++のソースファイルに含まれなければならないヘッダファイルである.これはコンピュータによって見付けられる場所になければならない.このヘッダファイルは,それを含むソースファイルと同じディレクトリに置くこともできれば,開発ツールで提供された標準ヘッダファイルと同じ場所に置くこともできる.またはヘッダファイルの検索パスにwstp.hの場所を加えることもできる.これは通常コマンドラインスイッチ,環境変数,ダイアログボックスの設定を使って行われる.
CompilerAdditions\wstp*i*.lib
*.libファイルは,WSTP共有ライブラリのコードにある関数への参照を解決するために リンカーが使用するインポートライブラリである.これらの.libファイルのうちの一つがプロジェクトファイル,makefile,リンクコマンドラインで参照される.インポートライブラリの形式は標準化されていないので,最も人気の高い開発環境のそれぞれについて一つのインポートライブラリが提供されている.
wstp32i4m.libあるいはwstp64i4m.libはMicrosoft Visual Studioを含むMicrosoft C/C++開発ツールで使用されるインポートライブラリである.これはMicrosoftリンカーにより生成されるCOFFインポートライブラリである.このファイルはMicrosoftリンカーに見付けられるところに置かれなければならない.パスの指定を避けるためには,このファイルをC:\Program Files\Microsoft Visual Studio 10\VC\PlatformSDK\libディレクトリに置く.64ビットの.libファイルはC:\Program Files\Microsoft Visual Studio 10\VC\PlatformSDK\lib\AMD64ディレクトリに置く.
CompilerAdditions\wsprep.exe
wsprep.exeはテンプレートファイルを処理することによりWSTPプログラムが自動的に書き出す32ビットのコンソールプログラムである.これは開発ツールのBinディレクトリに置くと便利であろう.64ビットのWindowsでは,wsprep.exeは64ビットのコンソールプログラムである.

PrebuiltExamplesディレクトリ

このフォルダには例題プログラムを構築する前のバージョンが含まれている.「WSTPプログラムの構築」ではWSTPExamplesフォルダのソースコードを使って自分で例題プログラムを構築する方法を説明する.「WSTPプログラムの実行」ではこれらのプログラムの実行方法を説明する.

WSTPExamplesディレクトリ

このフォルダにはいくつかの非常に簡単なWSTPプログラムのソースコードが含まれている.このソースコードを使うことで,自分でコードを書かなくてもWSTPプログラムの構築および実行方法が学べる.

その他のコンポーネントディレクトリ

DebugLibrariesは,役に立つ詳細なエラーチェックとログ情報を行うWSTPLibrariesのコピーである.このライブラリの使用方法は「トラブルシューティング」をご覧いただきたい.
WSTPプログラムの構築
WSTPプログラムを構築する一般的な手順は,WSTP関数を呼び出すCあるいはC++のソースファイルにwstp.hを加え,ソースファイルをコンパイルし,結果のオブジェクトコードをWSTPインポートライブラリ,およびアプリケーションによって必要とされる他の標準ライブラリに連結するというものである.アプリケーションがWSTPテンプレートメカニズムを使っている場合,テンプレートファイルはまずwsprepを使ってCのソースファイルに処理されなければならない.よく使われる開発環境のいくつかについての詳細がここで提供されている.
「Microsoft Visual StudioでWSTPプログラムを構築する」 のビルドの手順では,WSTPのcompiler additionsについて,推奨されるインストール手順に従ったものと仮定する.compiler additionsをハードディスクの別の場所に置いた場合は,環境変数を設定するか,追加のコマンドライン引数を指定するか,WSTP compiler additionsを参照するときに完全パス名を指定するかして手順を変更する必要がある.

WSTPのバージョン付け

共有ライブラリとして,WSTPの各バージョンは前バージョンとの互換性を維持しなければならない.しかし,新しい機能を追加する必要がある場合もある.WSTPは多くのコンパイル時およびランタイム環境に適合できる簡単なバージョン付けストラテジーを採用している.

ストラテジー

WSTPは実装やインターフェースを改善することにより向上する.wstp.hで定義されているWSREVISIONあるいはWSINTERFACEの値は,改善が加えられリリースされるたびに増加する.
WSREVISIONは現行のバージョン番号である.これは,ソースに変更が加えられ,任意のプラットフォームでWSTPが構築され配布されるたびに増加する.バグの修正,最適化,インターフェースに関するその他の改善点ではこの番号だけが増加する.
WSINTERFACEはWSTPの文書化されたインターフェースの名前である.この番号は,名前の付いた定数や関数が追加・削除されたり,現行の正しいクライアントプログラムを壊す可能性のある動作の変更が行われるたびに増加する.WSTPのインターフェースは徐々に向上することが想定されているため,大きい数のインターフェースを実装した方が,効率的なクライアントプログラムを書くのにより完全で便利である.特に,特定のインターフェースは以前のインターフェースの便利な機能すべてを提供する.
Windowsでは,WSTPライブラリの異なるインターフェースは異なる共有ライブラリに実装される.ファイルwstp32i4.dllはWSTPの最新バージョンのInterface 4の実装を含んでいる.WSTPプログラムを実行するためには,Windowsシステムフォルダにこれらのファイルの最新版(共有ライブラリのPropertiesボックスに表示される)だけを保存していればよい.
また,各WSTPインターフェースにはリンクする別々のインポートライブラリがあるので,開発者はコンパイル時にどのインターフェースを要求するかについて細心の注意を払わなければならない.例えば,MicrosoftのVisual Studioを使う開発者がInterface 4で加えられた機能を必要とする場合,異なるインターフェースのライブラリファイルではなくwstp32i4m.libとリンクする必要がある.

WSTPのテンプレートファイルを使う

「WSTPと外部プログラム通信」で説明してあるように,プログラムでWSTPテンプレートメカニズムを使う場合は,wsprepコンソールプログラムを使ってテンプレートエントリを含むソースファイルを同時に前処理しなければならない.テンプレートエントリは,テンプレートキーワードを含む行の列である.各エントリは,評価されたときに,関連付けられたC関数を呼び出すWolfram言語関数を定義する.wsprepがそのようなソースファイルを処理するとき,テンプレートエントリをC関数に変換し,他のテキストを変更せずに渡し,WSTPを使ってリモート手続き呼び出しメカニズムを実装する追加のC関数を書き出す.結果はコンパイルの準備ができたCのソースファイルである.
例えば,以下のコマンド
は,addtwo.tmのテンプレートエントリと他のテキストからCのソースファイルaddtwotm.cを生成する.それからCコンパイラを使って出力ファイルをコンパイルする.プログラムの構築にmakeユーティリティを使っている場合は,makefileに以下の規則と類似の規則を加えることができる.

Microsoft Visual StudioでWSTPプログラムを構築する

コマンドラインツールを使う

Visual Studio 2012
コマンドウィンドウからコマンドラインツールを使うためには,環境を設定するためにバッチファイルVCVARSALL.BATを実行しなければならない.このファイルはC:\Program Files\Microsoft Visual Studio 11\VC\VCVARSALL.BATにある.または,スタート すべてのプログラム Microsoft Visual Studio 2012 Visual Studio Tools VS2012 x86 Native Tools Command Promptで提供されるショートカットを使ってもよい.VCVARSALL.BATは,その環境がどのコンパイラツールのセットを使うかを示す引数を取る.32ビットのWindows開発ではVCVARSALL.BAT x86を,64ビットのWindows開発ではVCVARSALL.BAT amd64を使う.また,64ビットのWindowsマシンでは,スタート すべてのプログラム Microsoft Visual Studio 2012 Visual Studio Tools VS2012 x64 Cross Tools Command Promptで提供されるショートカットを使うことができる.VCVARSALL.BATは環境変数PATHINCLUDELIBを正しく設定するので,コマンドライン環境からMicrosoftのコンパイラツールを使うことができる.
Wolfram言語カーネルにより呼び出されるWSTPプログラムを構築する
addtwo.exe例題プログラムは以下のように構築する.

1.  スタート すべてのプログラム Microsoft Visual Studio 2012 Visual Studio Tools VS2012 x86 Native Tools Command Prompt(64ビットのWindowsではスタート すべてのプログラム Microsoft Visual Studio 2012 Visual Studio Tools VS2012 x64 Cross Tools Command Prompt)を実行してコマンドラインプロンプトウィンドウを開始する.

2.  WSTPExamplesディレクトリに移動する.

64ビットのWindowsでは以下のコマンドを使う.

C:
cd "C:\Program Files\Wolfram Research\Mathematica\11.0\"
cd SystemFiles\Links\WSTP\DeveloperKit\Windows-x86-64\WSTPExamples\

Windowsのバージョンによっては,書込み許可のあるファイルシステムのフォルダにWSTPExamplesディレクトリのコンテンツをコピーする必要がある場合がある.

3.  以下の5つのコマンドをタイプする.

64ビットのWindowsでは,最後のコマンドの代りに以下を使う.

LINK addtwo.obj addtwotm.obj wstp64i4m.lib /OUT:addtwo.exe
Wolfram言語カーネルを呼び出すWSTPプログラムを構築する
factor.exe例題プログラムは以下のように構築する.

4.  スタート すべてのプログラム Microsoft Visual Studio 2012 Visual Studio Tools VS2012 x64 Cross Tools Command Prompt(64ビットのWindowsではスタート すべてのプログラム Microsoft Visual Studio 2012 Visual Studio Tools VS2012 x64 Cross Tools Command Prompt)を実行してコマンドラインプロンプトウィンドウを開始する.

5.  WSTPExamplesディレクトリに移動する.

64ビットのWindowsでは以下のコマンドを使う.

C:
cd "C:\Program Files\Wolfram Research\Mathematica\11.0\"
cd SystemFiles\Links\WSTP\DeveloperKit\Windows-x86-64\WSTPExamples\

Windowsのバージョンによっては,書込み許可のあるファイルシステムのフォルダにWSTPExamplesディレクトリのコンテンツをコピーする必要がある場合がある.

6.  以下の4つのコマンドをタイプする.

64ビットのWindowsでは最後のコマンドの代りに以下のコマンドを使う.

LINK factor.obj wstp64i4m.lib /OUT:factor.exe
Wolfram言語カーネルから呼ばれたWSTPプログラムをデバッグする
addtwo.exeのデバッグバージョンは以下のように構築する.

7.  「Wolfram言語カーネルにより呼び出されるWSTPプログラムを構築する」のステップ1から3までに従うが,ステップ3は以下のコマンドを使う.

64ビットのWindowsでは,最後のコマンドの代りに以下のコマンドを使う.

LINK addtwo.obj addtwotm.obj wstp64i4m.lib /OUT:addtwo.exe

addtwo.exeをデバッグする方法.

8.  Microsoft Visual Studioを起動する.

9.  ファイルメニューからOpen Project/Solutionを選ぶ.

Open Projectダイアログボックスが表示される.

10.  ファイルタイプのドロップダウンリストからExe Project Files (*.exe)を選び,ファイル選択ウィンドウに.exeファイルが表示されるようにする.

11.  addtwo.exeを含むドライブとディレクトリを選ぶ.

12.  addtwo.exeを選び,Openボタンをクリックする.

13.  デバッガを起動するためには,F5を押すかDebugメニューの下のStart Debuggingコマンドを選ぶかする.

デバッグが終了しプロジェクトソリューションを閉じるとき,addtwo.exeに関連付けられた新しいソリューションを保存するかどうかを尋ねられる.ブレークポイントと他のデバッグ設定が保存したければOKを選ぶ.

Wolfram言語カーネルを呼び出すWSTPプログラムをデバッグする
factor.exeのデバッグバージョンは以下のように構築する.

14.  「Wolfram言語カーネルを呼び出すWSTPプログラムを構築する」のステップ1から3までに従うが,ステップ3は以下のコマンドを使う.

64ビットのWindowsでは,最後のコマンドの代りに以下のコマンドを使う.

LINK factor.obj wstp64i4m.lib /OUT:factor.exe
factor.exeをデバッグする方法.

15.  Microsoft Visual Studioを起動する.

16.  ファイルメニューからOpen Project/Solutionを選ぶ.

Open Projectダイアログボックスが表示される.

17.  ファイルタイプのドロップダウンリストからExe Project Files (*.exe)を選び,ファイル選択ウィンドウに.exeファイルが表示されるようにする.

18.  factor.exeを含むドライブとディレクトリを選ぶ.

19.  factor.exeを選び,Openボタンをクリックする.

20.  ProjectメニューからPropertiesを選ぶ.

プロジェクトの設定ページが現れる.

21.  Parametersセクションの下で,Argumentsテキストボックスをクリックし「-linklaunch」とタイプする.

22.  OKボタンをクリックする.

23.  デバッグを開始するためにはF5を押すか,Debugメニューの下のStart Debuggingコマンドを選ぶ.

24.  WSOpenArgcArgv()が実行されると,Choose a WSTP Program to Launchダイアログボックスが現れる.MathKernel.exeを開く.

デバッグが終了しプロジェクトソリューションを閉じるとき,factor.exeに関連付けられた新しいソリューションを保存するかどうかを尋ねられる.ブレークポイントと他のデバッグ設定が保存したければOKを選ぶ.

Visual Studio 2010
コマンドウィンドウからコマンドラインツールを使うためには,環境を設定するためにバッチファイルVCVARSALL.BATを実行しなければならない.このファイルはC:\Program Files\Microsoft Visual Studio 10\VC\VCVARSALL.BATにある.または,スタート すべてのプログラム Microsoft Visual Studio 2010 Visual Studio Tools Visual Studio Command Prompt (2010)で提供されるショートカットを使ってもよい.VCVARSALL.BATは,その環境がどのコンパイラツールのセットを使うかを示す引数を取る.32ビットのWindows開発ではVCVARSALL.BAT x86を,64ビットのWindows開発ではVCVARSALL.BAT amd64を使う.また,64ビットのWindowsマシンでは,スタート すべてのプログラム Microsoft Visual Studio 2010 Visual Studio Tools Visual Studio x64 Win64 Command Prompt (2010)で提供されるショートカットを使うことができる.VCVARSALL.BATは環境変数PATHINCLUDELIBを正しく設定するので,コマンドライン環境からMicrosoft Compilerツールを使うことができる.
Wolfram言語カーネルにより呼び出されるWSTPプログラムを構築する
addtwo.exe例題プログラムは以下のように構築する.

1.  スタート すべてのプログラム Microsoft Visual Studio 2010 Visual Studio Tools Visual Studio Command Prompt (2010)(64ビットのWindowsではスタート すべてのプログラム Microsoft Visual Studio 2010 Visual Studio Tools Visual Studio x64 Win64 Command Prompt (2010))を実行してコマンドラインプロンプトウィンドウを開始する.

2.  WSTPExamplesディレクトリに移動する.

64ビットのWindowsでは以下のコマンドを使う.

C:
cd "C:\Program Files\Wolfram Research\Mathematica\11.0\"
cd SystemFiles\Links\WSTP\DeveloperKit\Windows-x86-64\WSTPExamples\

Windowsのバージョンによっては,書込み許可のあるファイルシステムのフォルダにWSTPExamplesディレクトリのコンテンツをコピーする必要がある場合がある.

3.  以下の5つのコマンドをタイプする.

64ビットのWindowsでは,最後のコマンドの代りに以下を使う.

LINK addtwo.obj addtwotm.obj wstp64i4m.lib /OUT:addtwo.exe
Wolfram言語カーネルを呼び出すWSTPプログラムを構築する
factor.exe例題プログラムは以下のように構築する.

4.  スタート すべてのプログラム Microsoft Visual Studio 2010 Visual Studio Tools Visual Studio Command Prompt (2010)(64ビットのWindowsではスタート すべてのプログラム Microsoft Visual Studio 2010 Visual Studio Tools Visual Studio x64 Win64 Command Prompt (2010))を実行してコマンドラインプロンプトウィンドウを開始する.

5.  WSTPExamplesディレクトリに移動する.

64ビットのWindowsでは以下のコマンドを使う.

C:
cd "C:\Program Files\Wolfram Research\Mathematica\11.0\"
cd SystemFiles\Links\WSTP\DeveloperKit\Windows-x86-64\WSTPExamples\

Windowsのバージョンによっては,書込み許可のあるファイルシステムのフォルダにWSTPExamplesディレクトリのコンテンツをコピーする必要がある場合がある.

6.  以下の4つのコマンドをタイプする.

64ビットのWindowsでは最後のコマンドの代りに以下のコマンドを使う.

LINK factor.obj wstp64i4m.lib /OUT:factor.exe
Wolfram言語カーネルから呼び出されたWSTPプログラムをデバッグする
addtwo.exeのデバッグバージョンは以下のように構築する.

7.  「Wolfram言語カーネルにより呼び出されるWSTPプログラムを構築する」のステップ1から3までに従うが,ステップ3は以下のコマンドを使う.

64ビットのWindowsでは,最後のコマンドの代りに以下のコマンドを使う.

LINK addtwo.obj addtwotm.obj wstp64i4m.lib /OUT:addtwo.exe

addtwo.exeをデバッグする方法.

8.  Microsoft Visual Studioを起動する.

9.  ファイルメニューからOpen Project/Solutionを選ぶ.

Open Projectダイアログボックスが表示される.

10.  ファイルタイプのドロップダウンリストからExe Project Files (*.exe)を選び,ファイル選択ウィンドウに.exeファイルが表示されるようにする.

11.  addtwo.exeを含むドライブとディレクトリを選ぶ.

12.  addtwo.exeを選び,Openボタンをクリックする.

13.  デバッグを開始するためには,F5を押すかDebugメニューの下のStart Debuggingコマンドを選ぶかする.

デバッグが終了しプロジェクトソリューションを閉じるとき,addtwo.exeに関連付けられた新しいソリューションを保存するかどうかを尋ねられる.ブレークポイントと他のデバッグ設定が保存したければOKを選ぶ.

Wolfram言語カーネルを呼び出すWSTPプログラムをデバッグする
factor.exeのデバッグバージョンは以下のように構築する.

14.  「Wolfram言語カーネルを呼び出すWSTPプログラムを構築する」のステップ1から3までに従うが,ステップ3は以下のコマンドを使う.

64ビットのWindowsでは,最後のコマンドの代りに以下のコマンドを使う.

LINK factor.obj wstp64i4m.lib /OUT:factor.exe
factor.exeをデバッグする方法.

15.  Microsoft Visual Studioを起動する.

16.  ファイルメニューからOpen Project/Solutionを選ぶ.

Open Projectダイアログボックスが表示される.

17.  ファイルタイプのドロップダウンリストからExe Project Files (*.exe)を選び,ファイル選択ウィンドウに.exeファイルが表示されるようにする.

18.  factor.exeを含むドライブとディレクトリを選ぶ.

19.  factor.exeを選び,Openボタンをクリックする.

20.  ProjectメニューからPropertiesを選ぶ.

プロジェクトの設定ページが現れる.

21.  Parametersセクションの下で,Argumentsテキストボックスをクリックし「-linklaunch」とタイプする.

22.  OKボタンをクリックする.

23.  デバッグを開始するためにはF5を押すか,Debugメニューの下のStart Debuggingコマンドを選ぶ.

24.  WSOpenArgcArgv()が実行されると,Choose a WSTP Program to Launchダイアログボックスが現れる.MathKernel.exeを開く.

デバッグが終了しプロジェクトソリューションを閉じるとき,factor.exeに関連付けられた新しいソリューションを保存するかどうかを尋ねられる.ブレークポイントと他のデバッグ設定が保存したければOKを選ぶ.

コンパイラスイッチの要約
スイッチ
動作
/nologo
著作権情報を表示しない
/W3
拡張された警告を表示する
/Z7
プロジェクトファイルにデバッグ情報を保存する
/Zi
デバッグ情報を別のプロジェクトデータベースファイルに保存する
/Fdaddtwo.pdb
/Ziを使ってプロジェクトデータベースファイルの名前を指定する
/Od
最適化をオフにする(デフォルト)
/O2
最適化ツールが小さいコードよりも高速なコードを優先する
/D
標準のヘッダファイルやwstp.hにより使われる定義
/c
リンクなしでのみコンパイルする
@filename
ファイルからもっと多くのコマンドライン引数を読み込む
CFLAGS
もっと多いコマンドライン引数を含む環境変数
リンカースイッチの要約
スイッチ
動作
/NOLOGO
著作権情報を表示しない
/DEBUG
実行ファイルやプロジェクトデータベースにデバッグ情報を保存する
/PDB:NONE
/DEBUGを使って実行ファイルにデバッグ情報を保存する
/PDB:addtwo.pdb
プロジェクトデータベースのデフォルト名をオーバーライドする
/OUT:addtwo.exe
出力ファイルに名前を付ける
/INCREMENTAL:no
もっとゆっくりリンクし,すべてをこじんまりとしたものにする
/SUBSYSTEM:windows
アプリケーションがそれ自身のウィンドウを生成するため,コンソールを必要としない(WinMain()が定義されている場合のデフォルト)
/SUBSYSTEM:console
コンソールが提供される(main()が定義されている場合のデフォルト)
標準システムライブラリ
インポートライブラリ
基本システムサービス
kernel32.lib
ファイルシステム,プロセス間通信,プロセス制御,メモリ,コンソール等の基本のOSサポート
advapi32.lib
セキュリティおよびRegistry呼び出しのサポート
インポートライブラリ
GUIシステムサービス
user32.lib
ウィンドウ,メッセージ,メニュー,コントロール,ダイアログボックス等のユーザインターフェース要素のサポート
gdi32.lib
テキストやグラフィックスの描画のサポート
winspool.lib
印刷やジョブの出力のサポート
comdlg32.lib
ファイルを開いたり保存したりすることや印刷すること等の一般的なダイアログのサポート
インポートライブラリ
シェルシステムサービス
shell32.lib
ドラッグアンドドロップ,実行ファイルとファイル名の拡張子との間の関連付け,実行ファイルからのアイコンの抽出のサポート
インポートライブラリ
OLEシステムサービス
ole32.lib
OLE v2 .1のサポート
oleaut32.lib
OLE自動化のサポート
uuid.lib
OLEとRPC(静的ライブラリ)で使われるUUIDのサポート
インポートライブラリ
データベースシステムサービス
odbc32.lib
ODBCを介したデータベース管理システムへのアクセス
odbccp32.lib
ODBCの設定と管理

プログラムビルドユーティリティNMAKEを使う

NMAKEはMicrosoftの開発ツールで提供されているユーティリティで,プログラム構築の過程を管理するものである.NMAKEは,1つあるいは複数のプログラムの構築および再構築のために要求される依存性やコマンドを記述するmakefileを読み込む.NMAKEは,1つあるいは複数の必要ファイルが更新されると,古くなったコンポーネントを再構築する.このドキュメントではNMAKEやmakefilesについて詳しく説明しない.ここでは,コマンドプロンプトにNMAKEとタイプするだけで上記にリストされたビルドコマンドを自動的に実行させる方法を説明する簡単なmakefileを使う.NMAKEとその汎用でパワフルなメカニズムを知り,マクロや特殊形式の使い方を学ぶためには,「Microsoft Visual Studio Guide」のNMAKE Referenceをご参照いただきたい.
Visual Studio 2012
Makefileを使ってWIN32 APIを使うテンプレートプログラムを構築する
NMAKEユーティリティを使ってaddtwo.exeを構築する方法.

1.  テキストエディタを使って,以下のテキストを含むファイルを作成する.

2.  このファイルをWSTPExamplesディレクトリにaddtwo.makとして保存する.

3.  スタート すべてのプログラム Microsoft Visual Studio 2012 Visual Studio Tools VS2012 x86 Native Tools Command Prompt(64ビットのWindowsではスタート すべてのプログラム Microsoft Visual Studio 2012 Visual Studio Tools VS2012 x64 Cross Tools Command Promptを使う)を実行して,コマンドプロンプトウィンドウを開始する.

4.  addtwoディレクトリに変更する.

5.  以下のコマンドをタイプする.

Makefilesはビルド規則,マクロ,その他の特殊形式の集合からできている.
ビルド規則の構成は,ターゲットファイル,その次にコロン,その次にターゲットの必要ファイルのリスト(既存であるかmakefileの他のビルド規則で構築されなければならない),その次に必要ファイルからターゲットを構築するのに必要なコマンドを含む1つあるいは複数のインデントした行となっている.例えば,上のmakefileは,ファイルaddtwotm.cはaddtwo.tmに依存しており,addtwo.tmが変更されたら常に再構築されなければならないと記述している.ターゲットのaddtwotm.cを再構築するためには,ビルドコマンドのwsprep addtwo.tm -o addtwotm.cが使われる.
マクロはという表記を使ってmakefileに挿入することのできる名前付きのテキストの文字列である.例えば,このmakefileでは,$(CFLAGS)が文字列/nologo /c /W3 /Z7 /Od /DWIN32 /D_DEBUG /D_WINDOWSの中に現れたら常に$(CFLAGS)NMAKEにより拡張される.
addtwo.cをコンパイルするコマンドはmakefileの中にただCL $(CFLAGS) addtwo.cとして現れると思うかも知れない.しかし,CFLAGSの定義を編集して結果のコンパイラコマンドがコマンドラインの最大許容長を超えることもあり得る.コマンドラインは長さが制約されているので,コマンドラインツールは,いわゆる応答ファイルからコマンドラインの引数を読み込むメカニズムを提供することが多い.シンタックスは一般に である.このメカニズムは以下の特殊形式を使って一時ファイルを生成することのできるNMAKEの機能とともに上で使われている.
<<
一時ファイルに入れるテキスト
<<
Makefileを使ってコンソールプログラムを構築する
NMAKEユーティリティを使ってfactor.exeを構築する.

6.  テキストエディタを使って,以下のテキストを含むファイルを作成する.

7.  このファイルをWSTPExamplesディレクトリにfactor.makとして保存する.

8.  スタート すべてのプログラム Microsoft Visual Studio 2012 Visual Studio Tools VS2012 x86 Native Tools Command Prompt(64ビットのWindowsではスタート すべてのプログラム Microsoft Visual Studio 2012 Visual Studio Tools VS2012 x64 Cross Tools Command Promptを使う)を実行して,コマンドプロンプトウィンドウを開始する.

9.  factorディレクトリに変更する.

10.  以下の2つのコマンドをタイプする.

Visual Studio 2010
Makefileを使ってWIN32 APIを使うテンプレートプログラムを構築する
NMAKEユーティリティを使ってaddtwo.exeを構築する.

1.  テキストエディタを使って,以下のテキストを含むファイルを作成する.

2.  このファイルをWSTPExamplesディレクトリにaddtwo.makとして保存する.

3.  スタート すべてのプログラム Microsoft Visual Studio 2012 Microsoft Visual Studio 2010 Visual Studio Tools Visual Studio Command Prompt (2010)(64ビットのWindowsではスタート すべてのプログラム Microsoft Visual Studio 2010 Visual Studio Tools Visual Studio x64 Win64 Command Prompt (2010)を使う)を実行して,コマンドプロンプトウィンドウを開始する.

4.  addtwoディレクトリに変更する.

5.  以下のコマンドをタイプする.

Makefilesはビルド規則,マクロ,その他の特殊形式の集合からできている.
ビルド規則の構成は,ターゲットファイル,その次にコロン,その次にターゲットの必要ファイルのリスト(既存であるかmakefileの他のビルド規則で構築されなければならない),その次に必要ファイルからターゲットを構築するのに必要なコマンドを含む1つあるいは複数のインデントした行となっている.例えば,上のmakefileは,ファイルaddtwotm.cはaddtwo.tmに依存しており,addtwo.tmが変更されたら常に再構築されなければならないと記述している.ターゲットのaddtwotm.cを再構築するためには,ビルドコマンドのwsprep addtwo.tm -o addtwotm.cが使われる.
マクロはという表記を使ってmakefileに挿入することのできる名前付きのテキストの文字列である.例えば,このmakefileでは,$(CFLAGS)が文字列/nologo /c /W3 /Z7 /Od /DWIN32 /D_DEBUG /D_WINDOWSの中に現れたら常に$(CFLAGS)NMAKEにより拡張される.
addtwo.cをコンパイルするコマンドはmakefileの中にただCL $(CFLAGS) addtwo.cとして現れると思うかも知れない.しかし,CFLAGSの定義を編集して結果のコンパイラコマンドがコマンドラインの最大許容長を超えることもあり得る.コマンドラインは長さが制約されているので,コマンドラインツールは,いわゆる応答ファイルからコマンドラインの引数を読み込むメカニズムを提供することが多い.シンタックスは一般に である.このメカニズムは以下の特殊形式を使って一時ファイルを生成することのできるNMAKEの機能とともに上で使われている.
<<
一時ファイルに入れるテキスト
<<
Makefileを使ってコンソールプログラムを構築する
NMAKEユーティリティを使ってfactor.exeを構築する.

6.  テキストエディタを使って,以下のテキストを含むファイルを作成する.

7.  このファイルをWSTPExamplesディレクトリにfactor.makとして保存する.

8.  スタート すべてのプログラム Microsoft Visual Studio 2010 Visual Studio Tools Visual Studio Command Prompt (2010)(64ビットのWindowsではMicrosoft Visual Studio 2010 Visual Studio Tools Visual Studio x64 Win64 Command Prompt (2010)を使う)を実行して,コマンドプロンプトウィンドウを開始する.

9.  factorディレクトリに変更する.

10.  以下の2つのコマンドをタイプする.

統合開発環境のVisual Studio 2012を使う

すべてのプロジェクトに共通のステップ
Microsoft Visual Studio 2012でWSTPを使うのに必要なステップ.

1.  wstp.hをWSTP Developer KitからMicrosoft Visual Studio 2012 Includeディレクトリにコピーする.

32ビットWindows

32ビットWindowsのDeveloper Kitパス:C:\Program Files\Wolfram Research\Mathematica\11.0\SystemFiles\Links\WSTP\DeveloperKit\Windows\CompilerAdditions\wstp.h

32ビットWindowsのVisual Studio 2012 Includeディレクトリ:C:\Program Files\Microsoft Visual Studio 11\VC\Include

64ビットWindows

64ビットのWindowsのDeveloper Kitパス:C:\Program Files\Wolfram Research\Mathematica\11.0\SystemFiles\Links\WSTP\DeveloperKit\Windows-x86-64\CompilerAdditions\wstp.h

64ビットのWindowsのVisual Studio 2012 Includeディレクトリ:C:\Program Files (x86)\Microsoft Visual Studio 11\VC\Include

2.  .libファイルをMicrosoft Visual Studio Libディレクトリにコピーする.

32ビットWindows

wstp32i4m.libをC:\Program Files\Wolfram Research\Mathematica\11.0\SystemFiles\Links\WSTP\DeveloperKit\Windows\CompilerAdditions\*.libから C:\Program Files\Microsoft Visual Studio 11\VC\Libへコピーする.

64ビットWindows

wstp64i4m.libをC:\Program Files\Wolfram Research\Mathematica\11.0\AddOns\WSTP\DeveloperKit\Windows-x86-64\CompilerAdditions\*.libからC:\Program Files (x86)\Microsoft Visual Studio 11\VC\Lib\AMD64へコピーする.

3.  wsprep.exeをコピーする.

32ビットWindows

C:\Program Files\Wolfram Research\Mathematica\11.0\SystemFiles\Links\WSTP\DeveloperKit\Windows\CompilerAdditions\wsprep.exeからC:\Program Files\Microsoft Visual Studio 11\VC\binへコピーする.

64ビットWindows

C:\Program Files\Wolfram Research\Mathematica\11.0\SystemFiles\Links\WSTP\DeveloperKit\Windows-x86-64\CompilerAdditions\wsprep.exeからC:\Program Files (x86)\Microsoft Visual Studio 11\VC\bin\amd64へコピーする.

addtwo.exeのプロジェクトを作成する.
addtwo.exeを構築,編集,デバッグするために使うことのできるプロジェクトソリューションを作成する.

1.  Microsoft Visual Studio 2012を起動する.

2.  File New Projectをクリックする.

New Projectダイアログボックスが表示される.

3.  Installed Templates Visual C++を選んでWin32 Projectアイコンをクリックする.Visual Studio 2012 Update 3では,Wind32Projectsがカスタムビルドツールおよびカスタムビルドステップで正しく動作しないバグがある.Win32 Project使う際に問題がある場合は, 代りにWin32 Console Applicationプロジェクトアイコンを使うとよい.

4.  Locationテキストフィールドに以下をタイプする.

C:\users\<username>\documents\visual studio 2012\Projects

Nameテキストフィールドにaddtwoとタイプする.

OKをクリックする.

Win32 Application Wizardダイアログボックスが現れる.

5.  Application Settingsをクリックする.Additional optionsの下のEmpty Projectテキストボックスをクリックする.

6.  Security Development Lifecycle checksチェックボックスのチェックを外す.Finishをクリックする.

7.  addtwoの64ビットバージョンを作成するためには,Win32ドロップダウンメニューをクリックし,Configuration Managerを選ぶ.

Configuration Managerダイアログが現れる.

Active solution platform の下のドロップダウンメニューを選び, New をクリックする.

New Solution Platform ダイアログが現れる.

New Platform: ドロップダウンメニューで x64 を選び, Copy settings from: ドロップダウンメニューで Win32 を選ぶ.

OK/Close をクリックしてダイアログウィンドウを閉じる.

Win32 ドロップダウンメニューをクリックして x64 を選ぶ.

8.  Solution Explorerの中のaddtwoプロジェクトを1度クリックして選ぶ.Project メニューからProject Add Existing Itemを選ぶ.

Add Existing Itemダイアログボックスが現れる.

9.  ファイル選択ウィンドウを使って次のディレクトリをブラウズする.

32ビットWindows

C:\Program Files\Wolfram Research\Mathematica\11.0\SystemFiles\Links\WSTP\DeveloperKit\Windows\WSTPExamples

64ビットWindows

C:\Program Files\Wolfram Research\Mathematica\11.0\SystemFiles\Links\WSTP\DeveloperKit\Windows-x86-64\WSTPExamples

10.  File name: テキストボックスに"addtwo.c" "addtwo.tm"と,スペースで分けて入力する.Addをクリックする.

11.  プロンプトボックスが現れて.tmファイルの構築のための「New Rule」を作成したいかどうかを尋ねてくることがある.Noをクリックする.

12.  Solution Exploreraddtwo.tmファイルをSource Filesフォルダにドラッグする.

13.  Solution Explorerの中のaddtwoプロジェクトを一度クリックして選択する.ProjectメニューからProject Add New Itemを選ぶ.

Add New Itemダイアログボックスが現れる.

Locationテキストフィールドに以下を加える.

C:\Users\<username>\documents\visual studio 2012\Projects\addtwo

C++ File (.cpp)をクリックする.

Name: テキストフィールドに,addtwotm.cとタイプする.

Addをクリックする.

ファイルエディタ枠で開いているaddtwotm.cファイルを閉じる.

14.  Solution Explorerでaddtwoプロジェクトを右クリックし,Propertiesを選ぶ.

15.  Configuration Propertiesの隣のExpand Treeボタンをクリックする.

16.  Linkerの隣のExpand Treeボタンをクリックする.

17.  Inputエントリをクリックする.

18.  Additional Dependenciesテキストフィールドにwstp32i4m.libと入力する.

OKをクリックする.

64ビットのWindowsの場合はwstp64i4m.libを入力する.

19.  Solution Explorerでaddtwo.tmをクリックする.ProjectメニューからProject Propertiesを選ぶ.

addtwo.tm Property Pagesダイアログボックスが現れる.

20.  Configuration Propertiesの隣のExpand Tree ボタンをクリックする.

21.  Generalエントリをクリックする.

22.  Item TypeドロップダウンをCustom Build Toolに変更する.

23.  Custom Build Toolの隣のExpand Treeボタンをクリックする.

24.  Generalエントリをクリックする.

25.  一番右の枠でCommand Lineの向かいの空のボックスをクリックする.このテキストボックスに次のようにタイプする(引用符を含める): "$(VCInstallDir)\bin\wsprep.exe" "%(FullPath)" -o "$(ProjectDir)..\addtwotm.c"

64ビットWindows

64ビットのWindowsでは次を使う: "$(VCInstallDir)\bin\amd64\wsprep.exe" "%(FullPath)" -o "$(ProjectDir)..\addtwotm.c".

26.  Outputsテキストの向かいのテキストフィールドに..\addtwotm.cとタイプする.

OKをクリックする.

27.  SolutionExplorerのaddtwoプロジェクトを右クリックし,Propertiesを選ぶ.

28.  Configuration Propertiesの隣のExpand Treeボタンをクリックする.

29.  Generalエントリをクリックする.

30.  Project Defaults拡張ツリーボタンをクリックする.

31.  Character Setの向かいのドロップダウンメニューをNot Setに設定する.

OKをクリックする.

32.  BuildメニューからBuild Build Solutionを選ぶ.以下のようなリンカーエラーが出力される.

1>------ Build started: Project: addtwo, Configuration: Debug x64 ------
1> addtwo.c
1>MSVCRTD.lib(crtexe.obj) : error LNK2019: unresolved external symbol main referenced in function __tmainCRTStartup
1>c:\users\steve\documents\visual studio 2012\Projects\addtwo\x64\Debug\addtwo.exe : fatal error LNK1120: 1 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

前述のようにWin32 Console Applicationプロジェクト設定に切り換えなければならなかったら,ファイルaddtwo.cを編集する必要がある.ライン25を

#if WINDOWS_WSTP

から

#if 0 && WINDOWS_WSTP

に変更してaddtwo.cを保存し,Build Build Solutionを再び実行する.

33.  addtwo.exeバイナリは以下にある.

32ビットWindows

C:\users\<username>\documents\visual studio 2012\Projects\addtwo\addtwo\Debug

64ビットWindows

C:\users\<username>\documents\visual studio 2012\Projects\addtwo\addtwo\x64\Debug

factor.exeのプロジェクトを作成する
factor.exeを構築,編集,デバッグするために使うことのできるプロジェクトソリューションを作成する.

1.  Microsoft Visual Studio 2012を起動する.

2.  File New Projectをクリックする.

New Projectダイアログボックスが表示される.

3.  Installed Templates Visual C++を選んでWin32 Console Applicationアイコンをクリックする.

4.  Locationテキストフィールドに以下をタイプする.

C:\users\<username>\documents\visual studio 2012\Projects

Nameテキストフィールドにfactorとタイプする.

OKをクリックする.

Win32 Application Wizardダイアログボックスが現れる.

5.  Application Settingsをクリックする.Additional optionsの下のEmpty Projectテキストボックスをクリックする.

6.  Security Development Lifecycle checksチェックボックスのチェックを外す.Finishをクリックする.

7.  factorの64ビットバージョンを作成するためには,Win32ドロップダウンメニューをクリックし,Configurationを選ぶ.

Configuration Managerダイアログが現れる.

Platform の下のドロップダウンメニューを選び, New をクリックする.

New Project Platform ダイアログが現れる.

New Platform: ドロップダウンメニューで x64 を設定し, Copy settings from: ドロップダウンメニューで Win32 を設定する.

OK をクリックしてダイアログウィンドウを閉じる.

Win32 ドロップダウンメニューをクリックして x64 を選ぶ.

8.  Solution Explorerの中のfactorプロジェクトを1度クリックして選ぶ.Project メニューからProject Add Existing Itemを選ぶ.

Add Existing Itemダイアログボックスが現れる.

9.  Look inドロップダウンメニューから次のディレクトリを選ぶ.

32ビットWindows

C:\Program Files\Wolfram Research\Mathematica\11.0\SystemFiles\Links\WSTP\DeveloperKit\Windows\WSTPExamples

64ビットWindows

C:\Program Files\Wolfram Research\Mathematica\11.0\SystemFiles\Links\WSTP\DeveloperKit\Windows-x86-64\WSTPExamples

10.  File name: テキストボックスにfactor.cと入力する.

Addをクリックする.

11.  Solution Explorerでfactorプロジェクトを右クリックし,Propertiesを選ぶ.

12.  Configuration Propertiesの隣のExpand Treeボタンをクリックする.

13.  Linkerの隣のExpand Treeボタンをクリックする.

14.  Inputエントリをクリックする.

15.  Additional Dependenciesテキストフィールドにwstp32i4m.libとタイプする.

OKをクリックする.

64ビットのWindowsではwstp64i4m.libを入力する.

16.  BuildメニューからBuild Build Solutionを選ぶ.

17.  factor.exeバイナリは以下にある.

32ビットWindows

C:\Program Files\Wolfram Research\Mathematica\11.0\SystemFiles\Links\WSTP\DeveloperKit\Windows\WSTPExamples\Debug

64ビットWindows

C:\Program Files\Wolfram Research\Mathematica\11.0\SystemFiles\Links\WSTP\DeveloperKit\Windows-x86-64\WSTPExamples\Debug

統合開発環境のVisual Studio 2010を使う

すべてのプロジェクトに共通のステップ
Microsoft Visual Studio 2010でWSTPを使うのに必要なステップ.

1.  wstp.hをWSTP Developer KitからMicrosoft Visual Studio 2010 Includeディレクトリにコピーする.

32ビットWindows

32ビットWindowsのDeveloper Kitパス:C:\Program Files\Wolfram Research\Mathematica\11.0\SystemFiles\Links\WSTP\DeveloperKit\Windows\CompilerAdditions\wstp.h

32ビットWindowsのVisual Studio 2010 Includeディレクトリ:C:\Program Files\Microsoft Visual Studio 10\VC\Include

64ビットWindows

64ビットのWindowsのDeveloper Kitパス:C:\Program Files\Wolfram Research\Mathematica\11.0\SystemFiles\Links\WSTP\DeveloperKit\Windows-x86-64\CompilerAdditions\wstp.h

64ビットのWindowsのVisual Studio 2010 Includeディレクトリ:C:\Program Files (x86)\Microsoft Visual Studio 10\VC\Include

2.  .libファイルをMicrosoft Visual Studio Libディレクトリにコピーする.

32ビットWindows

wstp32i4m.libをC:\Program Files\Wolfram Research\Mathematica\11.0\SystemFiles\Links\WSTP\DeveloperKit\Windows\CompilerAdditions\から C:\Program Files\Microsoft Visual Studio 10\VC\Libへコピーする.

64ビットWindows

wstp64i4m.libをC:\Program Files (x86)\Wolfram Research\Mathematica\11.0\AddOns\WSTP\DeveloperKit\Windows-x86-64\CompilerAdditions\からC:\Program Files (x86)\Microsoft Visual Studio 10\VC\Lib\amd64へコピーする.

3.  wsprep.exeをコピーする.

32ビットWindows

C:\Program Files\Wolfram Research\Mathematica\11.0\SystemFiles\Links\WSTP\DeveloperKit\Windows\CompilerAdditions\wsprep.exeからC:\Program Files\Microsoft Visual Studio 10\VC\binへコピーする.

64ビットWindows

C:\Program Files\Wolfram Research\Mathematica\11.0\SystemFiles\Links\WSTP\DeveloperKit\Windows-x86-64\CompilerAdditions\wsprep.exeからC:\Program Files (x86)\Microsoft Visual Studio 10\VC\bin\amd64へコピーする.

addtwo.exeのプロジェクトを作成する.
addtwo.exeを構築,編集,デバッグするために使うことのできるプロジェクトソリューションを作成する.

1.  Microsoft Visual Studio 2010を起動する.

2.  File New Projectをクリックする.

New Projectダイアログボックスが表示される.

3.  Installed TemplatesVisual C++ Win32を選び,Win32 Projectアイコンをクリックする.

4.  Locationテキストフィールドに以下をタイプする.

C:\users\<username>\documents\visual studio 2010\Projects

Nameテキストフィールドにaddtwoとタイプする.

OKをクリックする.

Win32 Application Wizardダイアログボックスが現れる.

5.  Application Settingsをクリックする.Additional optionsの下のEmpty Projectテキストボックスをクリックする.Finishをクリックする.

6.  addtwoの64ビットバージョンを作成するためには,Win32ドロップダウンメニューをクリックし,Configurationを選ぶ.

Configuration Managerダイアログが現れる.

Platform の下のドロップダウンメニューを選び, New をクリックする.

New Project Platform ダイアログが現れる.

New Platform: ドロップダウンメニューで x64 を設定し, Copy settings from: ドロップダウンメニューで Win32 を設定する.

OK をクリックしてダイアログウィンドウを閉じる.

Win32 ドロップダウンメニューをクリックして x64 を選ぶ.

7.  Solution Explorerの中のaddtwoプロジェクトを1度クリックして選ぶ.Project メニューからProject Add Existing Itemを選ぶ.

Add Existing Itemダイアログボックスが現れる.

8.  ファイル選択ウィンドウを使って次のディレクトリをブラウズする.

32ビットWindows

C:\Program Files\Wolfram Research\Mathematica\11.0\SystemFiles\Links\WSTP\DeveloperKit\Windows\WSTPExamples

64ビットWindows

C:\Program Files\Wolfram Research\Mathematica\11.0\SystemFiles\Links\WSTP\DeveloperKit\Windows-x86-64\WSTPExamples

9.  File name: テキストボックスに"addtwo.c" "addtwo.tm"と,スペースで分けて入力する.Addをクリックする.

10.  プロンプトボックスが現れて.tmファイルの構築のための「New Rule」を作成したいかどうかを尋ねてくることがある.Noをクリックする.

11.  Solution Exploreraddtwo.tmファイルをSource Filesフォルダにドラッグする.

12.  Solution Explorerの中のaddtwoプロジェクトを一度クリックして選択する.ProjectメニューからProject Add New Itemを選ぶ.

Add New Itemダイアログボックスが現れる.

Locationテキストフィールドに以下を加える.

C:\Users\<username>\documents\visual studio 2010\Projects\addtwo

C++ File (.cpp)をクリックする.

Name: テキストフィールドに,addtwotm.cとタイプする.

Addをクリックする.

ファイルエディタ枠で開いているaddtwotm.cファイルエディタを閉じる.

13.  Solution Explorerでaddtwoプロジェクトを右クリックし,Propertiesを選ぶ.

14.  Configuration Propertiesの隣のExpand Treeボタンをクリックする.

15.  Linkerの隣のExpand Treeボタンをクリックする.

16.  Inputエントリをクリックする.

17.  Additional Dependenciesテキストフィールドにwstp32i4m.libと入力する.

OKをクリックする.

64ビットのWindowsの場合はwstp64i4m.libを入力する.

18.  Solution Explorerでaddtwo.tmをクリックする.ProjectメニューからProject Propertiesを選ぶ.

addtwo.tm Property Pagesダイアログボックスが現れる.

19.  Configuration Propertiesの隣のExpand Treeボタンをクリックする.

20.  Custom Build Stepの隣のExpand Treeボタンをクリックする.

21.  Generalエントリをクリックする.

22.  一番右の枠でCommand Lineの向かいの空のボックスをクリックする.このテキストボックスに次のようにタイプする(引用符を含む): "$(VCInstallDir)\bin\wsprep.exe" "%(FullPath)" -o "$(ProjectDir)..\addtwotm.c"

64ビットWindows

64ビットのWindowsでは次を使う:"$(VCInstallDir)\bin\amd64\wsprep.exe" "%(FullPath)" -o "$(ProjectDir)..\addtwotm.c".

23.  Outputsテキストの向かいのテキストフィールドに..\addtwotm.cとタイプする.

OKをクリックする.

24.  SolutionExplorerのaddtwoプロジェクトを右クリックし,Propertiesを選ぶ.

25.  Configuration Propertiesの隣のExpand Treeボタンをクリックする.

26.  Generalエントリをクリックする.

27.  Project Defaults拡張ツリーボタンをクリックする.

28.  Character Setの向かいのドロップダウンメニューをNot Setに設定する.

OKをクリックする.

29.  BuildメニューからBuild Build Solutionを選ぶ.

30.  プロジェクトが構築されると,Microsoft Visual Studio 2010はファイルaddtwotm.cが変更されたことを知らせるダイアログボックスを表示し,ファイルを再ロードしたいかどうかを尋ねる.Yesをクリックする.

31.  addtwo.exeバイナリは以下にある.

32ビットWindows

C:\users\<username>\documents\visual studio 2010\Projects\addtwo\addtwo\Debug

64ビットWindows

C:\users\<username>\documents\visual studio 2010\Projects\addtwo\addtwo\x64\Debug

factor.exeのプロジェクトを作成する
factor.exeを構築,編集,デバッグするために使うことのできるプロジェクトソリューションを作成する.

1.  Microsoft Visual Studio 2010を起動する.

2.  File New Projectをクリックする.

New Projectダイアログボックスが表示される.

3.  Installed Templates枠で,Visual C++の隣のツリー拡張アイコンをクリックする.Win32を選ぶ.Templates枠で,Win32 Console Applicationアイコンをクリックする.

4.  Locationテキストフィールドに以下をタイプする.

C:\users\<username>\documents\visual studio 2010\Projects

Nameテキストフィールドにfactorとタイプする.

OKをクリックする.

Win32 Application Wizardダイアログボックスが現れる.

5.  Application Settingsをクリックする.Additional optionsの下のEmpty Projectテキストボックスをクリックする.Finishをクリックする.

6.  factorの64ビットバージョンを作成するためには,Win32ドロップダウンメニューをクリックし,Configurationを選ぶ.

Configuration Managerダイアログが現れる.

Platform の下のドロップダウンメニューを選び, New をクリックする.

New Project Platform ダイアログが現れる.

New Platform: ドロップダウンメニューで x64 を設定し, Copy settings from: ドロップダウンメニューで Win32 を設定する.

OK をクリックしてダイアログウィンドウを閉じる.

Win32 ドロップダウンメニューをクリックして x64 を選ぶ.

7.  Solution Explorerの中のfactorプロジェクトを1度クリックして選ぶ.ProjectメニューからProject Add Existing Itemを選ぶ.

Add Existing Itemダイアログボックスが現れる.

8.  Look inドロップダウンメニューから次のディレクトリを選ぶ.

32ビットWindows

C:\Program Files\Wolfram Research\Mathematica\11.0\SystemFiles\Links\WSTP\DeveloperKit\Windows\WSTPExamples

64ビットWindows

C:\Program Files\Wolfram Research\Mathematica\11.0\SystemFiles\Links\WSTP\DeveloperKit\Windows-x86-64\WSTPExamples

9.  File name: テキストボックスにfactor.cと入力する.

Addをクリックする.

10.  Solution Explorerでfactorプロジェクトを右クリックし,Propertiesを選ぶ.

11.  Configuration Propertiesの隣のExpand Treeボタンをクリックする.

12.  Linkerの隣のExpand Treeボタンをクリックする.

13.  Inputエントリをクリックする.

14.  Additional Dependenciesテキストフィールドにwstp32i4m.libとタイプする.

OKをクリックする.

15.  BuildメニューからBuild Build Solutionを選ぶ.

16.  factor.exeバイナリは以下にある.

32-bit Windows

C:\Program Files\Wolfram Research\Mathematica\11.0\SystemFiles\Links\WSTP\DeveloperKit\Windows\WSTPExamples\Debug

64ビットWindows

C:\Program Files\Wolfram Research\Mathematica\11.0\SystemFiles\Links\WSTP\DeveloperKit\Windows-x86-64\WSTPExamples\Debug

WSTPプログラムの実行
「WSTPプログラムの構築」の手順は,WSTPExamplesディレクトリのソースコードを使って2つのWSTPプログラムを構築する方法を説明するものである.これらの2つのプログラムaddtwo.exeとfactor.exeはすでにPrebuiltExamplesフォルダの中に構築されている.自分で構築する前にすでに構築された例題を実行してみて,WSTP system additionsがインストールされ正常に動いていることを確認し,プログラムが適切に構築されるとどのようなことが起こるかをこれらの例題から学んでおくとよい.
2つの例題を試した後,次のサブセクションを読んでWindowsコンピュータでWSTPプログラムを実行するときに遭遇する他の問題点について学んでいただきたい.
WSTPプログラムにはaddtwoプログラムで要約されるものとfactorプログラムで要約されるものの2つの基本的な形式がある.addtwoプログラムで要約されるものはインストール可能なプログラムである.インストール可能なプログラムは,呼出しメカニズムを介してCプログラムをカーネルに接続することにより,カーネルに新しい機能を提供する.この新しい機能を取得するためには,Wolfram言語のユーザはInstall[]関数を実行しなければならない.addtwoの例題では,引数として提供される2つの数を足すAddTwo[]と呼ばれる新しい関数を加えることになる.カーネルとインストール可能プログラムは互いにのみ通信し合える特別な関係を持つ.インストール可能プログラムが実行されるとき,接続のために情報を提供する必要がある.factorプログラムで要約されるものは,フロントエンドである.フロントエンドはリンクを作成したり管理したりする作業をすべて行う.factorの例題に加え,WolframシステムフロントエンドとWolfram言語カーネルもフロントエンドタイプの例である.フロントエンドは実行するために追加の情報を必要としないが,通常実行中のある段階で接続を確立する.

Wolfram言語カーネルからすでに構築された例題を実行する

最初の例題プログラム,addtwoはWolframシステムにインストールされているWSTPテンプレートプログラムである.つまり,このプログラムは背景で実行し,Wolfram言語のサービスとして,外部でコンパイルされた1つあるいは複数の関数を提供するのである.Wolfram言語ユーザにとって,これらの関数は組込みのように見える.addtwoプログラムは,C関数のaddtwo()の呼出しとしてWolfram言語関数AddTwo[]を定義するテンプレートファイルを使う.テンプレートメカニズムについては「外部プログラムをWolfram言語から呼び出す」で説明してある.このプログラムのソースコードは以下のようなものである.
次の2つのセルを評価する:
新しく利用可能になった関数を見るためには,次のセルを評価する:
以下でファイルaddtwo.tmで定義されているAddTwo[]関数の使用法メッセージを表示する:
使ってみる:
2つの機械整数の和が機械整数に適合しない場合,あるいはどちらかの引数が機械整数でない場合にどうなるかを見てみる(2^31-1は最大の機械整数である.コンパイラが2バイト整数を使う場合は2^15-1が最大のC intである):
AddTwoプログラムは大きい整数には適していない:
以下はAddTwo[_Integer, _Integer]ではない:
Install[]LinkOpen[]を呼び出し,外部プログラムの情報を交換してAddTwo[]の定義を設定する.この詳細について心配する必要はないが,興味がある方は以下を評価するとよい:
外部プログラムを使い終わったら,以下を評価する:

すでに構築された例題内からWolfram言語カーネルを起動する

2つ目の例題プログラムのfactorは,Wolfram言語カーネルが背景で動いており,factorのサービスとしてカーネルの計算サービス(この場合はユーザによって入力された整数を素因数分解する機能)を提供するという意味で,Wolframシステムのフロントエンドであると言える.
他の例題プログラムと同様にこの例題プログラムもコンソールプログラムである.つまりグラフィカルユーザインターフェースを提供するのではなくANSI Cによって定義された標準のエラー,入力,出力ストリームを使ったコンソールウィンドウでユーザとインタラクトするのである.WSTPで試したとおり,最初はコンソールウィンドウを使った方が便利だと思うかもしれない.これについてはセクション「WSTPプログラムの構築」で詳しく述べる.
例題プログラムfactor.exeを実行する方法.

1.  コマンドプロンプトを開始する.

2.  PrebuiltExamplesディレクトリに変更する.

3.  以下のコマンドをタイプする.

Choose a WSTP Program To Launchダイアログボックスが現れる.

4.  MathKernel.exeを開く.

しばらくするとプロンプトが現れ,整数を入力するよう求める.

5.  10桁未満の整数をタイプしEnterを押す.(他のfactor例題はタイプする整数の大きさの制約が緩い.)

Wolfram言語により返された素因数が出力され,factorはWolfram言語とのリンクを閉じる.

サポートされるリンクプロトコル

WSTPリンクはC関数のWSOpenArgcArgv(),およびWolfram言語関数のLinkCreateLinkLaunchLinkConnectによって開かれる.これらの関数のどれもがリンクプロトコルを指定するためのオプションを取る. 32ビットのWindowsプラットフォームではLinkProtocolオプションの適正な値は"SharedMemory""TCPIP""FileMap""TCP""IntraProcess"である.64ビットのWindowsプラットフォームでは,LinkProtocolオプションの適正な値は"SharedMemory""TCPIP""TCP""IntraProcess"である.リンクプロトコルは接続の一端から他方へとデータを転送するのに使われるメカニズムである.LoopBackを除いてすべてのリンクモデルでデフォルトは"SharedMemory"である.
"FileMap"プロトコルと"SharedMemory"プロトコルを使うと,リンク名を31文字以下の任意の語にすることができる.一方"TCPIP"プロトコルと"TCP"プロトコルではリンク名は符号のない16ビットの整数であることが多い. "TCPIP"リンク名と"TCP"リンク名は整数であり,WSOpenArgcArgv()およびLinkOpen[]への桁の列として与えられる.
LinkMode->Launchの場合,リンク名は単に起動するファイルのパス名ではなく,スペースで区切られた引数を含むコマンドラインである.従って,ファイル名のスペースは適切に引用符が付いていなければならない.以下の例を見てみる.
これはコマンドライン引数"Prog.exe"でプログラム"My"を起動しようとしている.一方,下の例
は,"My Prog.exe"を起動するものである.
トラブルシューティング