C言語でのWSTP開発(Windows)
推奨されるインストール
すべてのコンパイラへのSystemAdditionsのインストール
MicrosoftコンパイラへのCompilerAdditionsのインストール
Visual Studio 2012
1. Mathematica内でWindows\CompilerAdditionsフォルダに移動する(64ビットのWindowsシステムでは,Windows-x86-64\CompilerAdditions\フォルダ).以下のコマンドを実行すると,これらのフォルダを含むウィンドウが開く.
explorer "C:\Program Files\Wolfram Research\Mathematica\11.0\SystemFiles\Links\WSTP\DeveloperKit\Windows\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
1. Mathematica内でWindows\CompilerAdditionsフォルダに移動する(64ビットのWindowsシステムでは,Windows-x86-64\CompilerAdditions\フォルダ).以下のコマンドを実行すると,これらのフォルダを含むウィンドウが開く.
explorer "C:\Program Files\Wolfram Research\Mathematica\11.0\SystemFiles\Links\WSTP\DeveloperKit\Windows\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の共有ライブラリとヘッダファイル
SystemAdditionsディレクトリ
wstp32i4.dll/wstp64i4.dll
WSTPデバイス
char* argv[] = {"-linkname", "foo", "-linkprotocol", "SharedMemory", "-linkmode", "connect"};
link = WSOpenArgv( stdenv, argv, argv + 6, 0);
char* argv[] = {"-linkname", "6000", "-linkprotocol", "TCPIP", "-linkmode", "connect"};
link = WSOpenArgv( stdenv, argv, argv + 6, 0);
char* argv[] = {"-linkname", "abcdef_ipq", "-linkprotocol", "IntraProcess", "-linkmode", "connect"};
link = WSOpenArgv(stdenv, argv, argv + 6, 0);
char *argv[] = {"-linkname", "abcdef_ipq", "-linkprotocol", "IntraProcess", "-linkmode", "listen"};
link = WSOpenArgv(stdenv, argv, argv + 6, 0);
char* argv[] = {"-linkname", "foo", "-linkprotocol", "FileMap", "-linkmode", "connect"};
link = WSOpenArgv( stdenv, argv, argv + 6, 0);
char* argv[] = {"-linkname", "6000", "-linkprotocol", "TCP", "-linkmode", "connect"};
link = WSOpenArgv( stdenv, argv, argv + 6, 0);
CompilerAdditionsディレクトリ
Visual Studio 2012
CompilerAdditions\wsprep.exe
Visual Studio 2010
CompilerAdditions\wstp.h
CompilerAdditions\wstp*i*.lib
CompilerAdditions\wsprep.exe
PrebuiltExamplesディレクトリ
WSTPExamplesディレクトリ
その他のコンポーネントディレクトリ
WSTPのバージョン付け
ストラテジー
WSTPのテンプレートファイルを使う
Microsoft Visual StudioでWSTPプログラムを構築する
コマンドラインツールを使う
Visual Studio 2012
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)を実行してコマンドラインプロンプトウィンドウを開始する.
C:
cd "C:\Program Files\Wolfram Research\Mathematica\11.0\"
cd SystemFiles\Links\WSTP\DeveloperKit\Windows\WSTPExamples\
C:
cd "C:\Program Files\Wolfram Research\Mathematica\11.0\"
cd SystemFiles\Links\WSTP\DeveloperKit\Windows-x86-64\WSTPExamples\
Windowsのバージョンによっては,書込み許可のあるファイルシステムのフォルダにWSTPExamplesディレクトリのコンテンツをコピーする必要がある場合がある.
SET CL=/nologo /c /DWIN32 /D_WINDOWS /W3 /O2 /DNDEBUG
SET LINK=/NOLOGO /SUBSYSTEM:windows /INCREMENTAL:no /PDB:NONE kernel32.lib user32.lib gdi32.lib
WSPREP addtwo.tm -o addtwotm.c
CL addtwo.c addtwotm.c
LINK addtwo.obj addtwotm.obj wstp32i4m.lib /OUT:addtwo.exe
64ビットのWindowsでは,最後のコマンドの代りに以下を使う.
LINK addtwo.obj addtwotm.obj wstp64i4m.lib /OUT:addtwo.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)を実行してコマンドラインプロンプトウィンドウを開始する.
C:
cd "C:\Program Files\Wolfram Research\Mathematica\11.0\"
cd AddOns\WSTP\DeveloperKit\Windows\WSTPExamples\
C:
cd "C:\Program Files\Wolfram Research\Mathematica\11.0\"
cd SystemFiles\Links\WSTP\DeveloperKit\Windows-x86-64\WSTPExamples\
Windowsのバージョンによっては,書込み許可のあるファイルシステムのフォルダにWSTPExamplesディレクトリのコンテンツをコピーする必要がある場合がある.
SET CL=/nologo /c /DWIN32 /D_CONSOLE /W3 /O2 /DNDEBUG
SET LINK=/NOLOGO /SUBSYSTEM:console /INCREMENTAL:no /PDB:NONE kernel32.lib user32.lib
CL factor.c
LINK factor.obj wstp32i4m.lib /OUT:factor.exe
64ビットのWindowsでは最後のコマンドの代りに以下のコマンドを使う.
LINK factor.obj wstp64i4m.lib /OUT:factor.exe
7. 「Wolfram言語カーネルにより呼び出されるWSTPプログラムを構築する」のステップ1から3までに従うが,ステップ3は以下のコマンドを使う.
SET CL=/nologo /c /DWIN32 /D_WINDOWS /W3 /Z7 /Od /D_DEBUG
SET LINK=/NOLOGO /SUBSYSTEM:windows /DEBUG /PDB:NONE /INCREMENTAL:no kernel32.lib user32.lib gdi32.lib
WSPREP addtwo.tm -o addtwotm.c
CL addtwo.c addtwotm.c
LINK addtwo.obj addtwotm.obj wstp32i4m.lib /OUT:addtwo.exe
64ビットのWindowsでは,最後のコマンドの代りに以下のコマンドを使う.
LINK addtwo.obj addtwotm.obj wstp64i4m.lib /OUT:addtwo.exe
8. Microsoft Visual Studioを起動する.
9. ファイルメニューからOpen ▶ Project/Solutionを選ぶ.
10. ファイルタイプのドロップダウンリストからExe Project Files (*.exe)を選び,ファイル選択ウィンドウに.exeファイルが表示されるようにする.
11. addtwo.exeを含むドライブとディレクトリを選ぶ.
12. addtwo.exeを選び,Openボタンをクリックする.
13. デバッガを起動するためには,F5を押すかDebugメニューの下のStart Debuggingコマンドを選ぶかする.
デバッグが終了しプロジェクトソリューションを閉じるとき,addtwo.exeに関連付けられた新しいソリューションを保存するかどうかを尋ねられる.ブレークポイントと他のデバッグ設定が保存したければOKを選ぶ.
14. 「Wolfram言語カーネルを呼び出すWSTPプログラムを構築する」のステップ1から3までに従うが,ステップ3は以下のコマンドを使う.
SET CL=/nologo /c /DWIN32 /D_CONSOLE /W3 /Z7 /Od /D_DEBUG
SET LINK=/NOLOGO /SUBSYSTEM:console /INCREMENTAL:no /PDB:NONE /DEBUG kernel32.lib user32.lib
CL factor.c
LINK factor.obj wstp32i4m.lib /OUT:factor.exe
64ビットのWindowsでは,最後のコマンドの代りに以下のコマンドを使う.
LINK factor.obj wstp64i4m.lib /OUT:factor.exe
15. Microsoft Visual Studioを起動する.
16. ファイルメニューからOpen ▶ Project/Solutionを選ぶ.
17. ファイルタイプのドロップダウンリストからExe Project Files (*.exe)を選び,ファイル選択ウィンドウに.exeファイルが表示されるようにする.
18. factor.exeを含むドライブとディレクトリを選ぶ.
19. factor.exeを選び,Openボタンをクリックする.
20. ProjectメニューからPropertiesを選ぶ.
21. Parametersセクションの下で,Argumentsテキストボックスをクリックし「-linklaunch」とタイプする.
23. デバッグを開始するためにはF5を押すか,Debugメニューの下のStart Debuggingコマンドを選ぶ.
24. WSOpenArgcArgv()が実行されると,Choose a WSTP Program to Launchダイアログボックスが現れる.MathKernel.exeを開く.
デバッグが終了しプロジェクトソリューションを閉じるとき,factor.exeに関連付けられた新しいソリューションを保存するかどうかを尋ねられる.ブレークポイントと他のデバッグ設定が保存したければOKを選ぶ.
Visual Studio 2010
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))を実行してコマンドラインプロンプトウィンドウを開始する.
C:
cd "C:\Program Files\Wolfram Research\Mathematica\11.0\"
cd SystemFiles\Links\WSTP\DeveloperKit\Windows\WSTPExamples\
C:
cd "C:\Program Files\Wolfram Research\Mathematica\11.0\"
cd SystemFiles\Links\WSTP\DeveloperKit\Windows-x86-64\WSTPExamples\
Windowsのバージョンによっては,書込み許可のあるファイルシステムのフォルダにWSTPExamplesディレクトリのコンテンツをコピーする必要がある場合がある.
SET CL=/nologo /c /DWIN32 /D_WINDOWS /W3 /O2 /DNDEBUG
SET LINK=/NOLOGO /SUBSYSTEM:windows /INCREMENTAL:no /PDB:NONE kernel32.lib user32.lib gdi32.lib
WSPREP addtwo.tm -o addtwotm.c
CL addtwo.c addtwotm.c
LINK addtwo.obj addtwotm.obj wstp32i4m.lib /OUT:addtwo.exe
64ビットのWindowsでは,最後のコマンドの代りに以下を使う.
LINK addtwo.obj addtwotm.obj wstp64i4m.lib /OUT:addtwo.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))を実行してコマンドラインプロンプトウィンドウを開始する.
C:
cd "C:\Program Files\Wolfram Research\Mathematica\11.0\"
cd AddOns\WSTP\DeveloperKit\Windows\WSTPExamples\
C:
cd "C:\Program Files\Wolfram Research\Mathematica\11.0\"
cd SystemFiles\Links\WSTP\DeveloperKit\Windows-x86-64\WSTPExamples\
Windowsのバージョンによっては,書込み許可のあるファイルシステムのフォルダにWSTPExamplesディレクトリのコンテンツをコピーする必要がある場合がある.
SET CL=/nologo /c /DWIN32 /D_CONSOLE /W3 /O2 /DNDEBUG
SET LINK=/NOLOGO /SUBSYSTEM:console /INCREMENTAL:no /PDB:NONE kernel32.lib user32.lib
CL factor.c
LINK factor.obj wstp32i4m.lib /OUT:factor.exe
64ビットのWindowsでは最後のコマンドの代りに以下のコマンドを使う.
LINK factor.obj wstp64i4m.lib /OUT:factor.exe
7. 「Wolfram言語カーネルにより呼び出されるWSTPプログラムを構築する」のステップ1から3までに従うが,ステップ3は以下のコマンドを使う.
SET CL=/nologo /c /DWIN32 /D_WINDOWS /W3 /Z7 /Od /D_DEBUG
SET LINK=/NOLOGO /SUBSYSTEM:windows /DEBUG /PDB:NONE /INCREMENTAL:no kernel32.lib user32.lib gdi32.lib
WSPREP addtwo.tm -o addtwotm.c
CL addtwo.c addtwotm.c
LINK addtwo.obj addtwotm.obj wstp32i4m.lib /OUT:addtwo.exe
64ビットのWindowsでは,最後のコマンドの代りに以下のコマンドを使う.
LINK addtwo.obj addtwotm.obj wstp64i4m.lib /OUT:addtwo.exe
8. Microsoft Visual Studioを起動する.
9. ファイルメニューからOpen ▶ Project/Solutionを選ぶ.
10. ファイルタイプのドロップダウンリストからExe Project Files (*.exe)を選び,ファイル選択ウィンドウに.exeファイルが表示されるようにする.
11. addtwo.exeを含むドライブとディレクトリを選ぶ.
12. addtwo.exeを選び,Openボタンをクリックする.
13. デバッグを開始するためには,F5を押すかDebugメニューの下のStart Debuggingコマンドを選ぶかする.
デバッグが終了しプロジェクトソリューションを閉じるとき,addtwo.exeに関連付けられた新しいソリューションを保存するかどうかを尋ねられる.ブレークポイントと他のデバッグ設定が保存したければOKを選ぶ.
14. 「Wolfram言語カーネルを呼び出すWSTPプログラムを構築する」のステップ1から3までに従うが,ステップ3は以下のコマンドを使う.
SET CL=/nologo /c /DWIN32 /D_CONSOLE /W3 /Z7 /Od /D_DEBUG
SET LINK=/NOLOGO /SUBSYSTEM:console /INCREMENTAL:no /PDB:NONE /DEBUG kernel32.lib user32.lib
CL factor.c
LINK factor.obj wstp32i4m.lib /OUT:factor.exe
64ビットのWindowsでは,最後のコマンドの代りに以下のコマンドを使う.
LINK factor.obj wstp64i4m.lib /OUT:factor.exe
15. Microsoft Visual Studioを起動する.
16. ファイルメニューからOpen ▶ Project/Solutionを選ぶ.
17. ファイルタイプのドロップダウンリストからExe Project Files (*.exe)を選び,ファイル選択ウィンドウに.exeファイルが表示されるようにする.
18. factor.exeを含むドライブとディレクトリを選ぶ.
19. factor.exeを選び,Openボタンをクリックする.
20. ProjectメニューからPropertiesを選ぶ.
21. Parametersセクションの下で,Argumentsテキストボックスをクリックし「-linklaunch」とタイプする.
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 | ファイルを開いたり保存したりすることや印刷すること等の一般的なダイアログのサポート |
インポートライブラリ
|
OLEシステムサービス
|
ole32.lib | OLE v2 .1のサポート |
oleaut32.lib | OLE自動化のサポート |
uuid.lib | OLEとRPC(静的ライブラリ)で使われるUUIDのサポート |
プログラムビルドユーティリティNMAKEを使う
Visual Studio 2012
1. テキストエディタを使って,以下のテキストを含むファイルを作成する.
# addtwo.mak a makefile for building the addtwo.exe example program
CFLAGS = /nologo /c /W3 /Z7 /Od /DWIN32 /D_DEBUG /D_WINDOWS
# Linking against gdi32.lib for access to windowing mechanisms
LFLAGS = /DEBUG /PDB:NONE /NOLOGO /SUBSYSTEM:windows /INCREMENTAL:no kernel32.lib user32.lib gdi32.lib
# Uncomment the value below for working on a 64-bit Windows system
# PLATFORM = WIN64
PLATFORM = WIN32
!if "$(PLATFORM)" == "WIN32"
LIBFILE = wstp32i4m.lib
!else
LIBFILE = wstp64i4m.lib
!endif
addtwo.exe : addtwo.obj addtwotm.obj
LINK addtwo.obj addtwotm.obj $(LIBFILE) /OUT:addtwo.exe @<<
$(LFLAGS)
<<
addtwo.obj : addtwo.c
CL @<< addtwo.c
$(CFLAGS)
<<
addtwotm.obj : addtwotm.c
CL @<< addtwotm.c
$(CFLAGS)
<<
# Need to call wsprep to preprocess WSTP template
addtwotm.c : addtwo.tm
wsprep addtwo.tm -o addtwotm.c
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を使う)を実行して,コマンドプロンプトウィンドウを開始する.
6. テキストエディタを使って,以下のテキストを含むファイルを作成する.
# factor.mak a makefile for building the factor.exe example program
# This makefile builds a console program
CFLAGS = /nologo /c /MLd /W3 /Z7 /Od /DWIN32 /D_DEBUG /D_CONSOLE
LFLAGS = /DEBUG /PDB:NONE /NOLOGO /SUBSYSTEM:console /INCREMENTAL:no kernel32.lib user32.lib
# Uncomment the value below for working on a 64-bit Windows system
# PLATFORM = WIN64
PLATFORM = WIN32
!if "$(PLATFORM)" == "WIN32"
LIBFILE = wstp32i4m.lib
!else
LIBFILE = wstp64i4m.lib
!endif
factor.exe : factor.obj
LINK factor.obj $(LIBFILE) /OUT:factor.exe @<<
$(LFLAGS)
<<
factor.obj : factor.c
CL @<< factor.c
$(CFLAGS)
<<
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を使う)を実行して,コマンドプロンプトウィンドウを開始する.
Visual Studio 2010
1. テキストエディタを使って,以下のテキストを含むファイルを作成する.
# addtwo.mak a makefile for building the addtwo.exe example program
CFLAGS = /nologo /c /W3 /Z7 /Od /DWIN32 /D_DEBUG /D_WINDOWS
# Linking against gdi32.lib for access to windowing mechanisms
LFLAGS = /DEBUG /PDB:NONE /NOLOGO /SUBSYSTEM:windows /INCREMENTAL:no kernel32.lib user32.lib gdi32.lib
# Uncomment the value below for working on a 64-bit Windows system
# PLATFORM = WIN64
PLATFORM = WIN32
!if "$(PLATFORM)" == "WIN32"
LIBFILE = wstp32i4m.lib
!else
LIBFILE = wstp64i4m.lib
!endif
addtwo.exe : addtwo.obj addtwotm.obj
LINK addtwo.obj addtwotm.obj $(LIBFILE) /OUT:addtwo.exe @<<
$(LFLAGS)
<<
addtwo.obj : addtwo.c
CL @<< addtwo.c
$(CFLAGS)
<<
addtwotm.obj : addtwotm.c
CL @<< addtwotm.c
$(CFLAGS)
<<
# Need to call wsprep to preprocess WSTP template
addtwotm.c : addtwo.tm
wsprep addtwo.tm -o addtwotm.c
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)を使う)を実行して,コマンドプロンプトウィンドウを開始する.
6. テキストエディタを使って,以下のテキストを含むファイルを作成する.
# factor.mak a makefile for building the factor.exe example program
# This makefile builds a console program
CFLAGS = /nologo /c /MLd /W3 /Z7 /Od /DWIN32 /D_DEBUG /D_CONSOLE
LFLAGS = /DEBUG /PDB:NONE /NOLOGO /SUBSYSTEM:console /INCREMENTAL:no kernel32.lib user32.lib
# Uncomment the value below for working on a 64-bit Windows system
# PLATFORM = WIN64
PLATFORM = WIN32
!if "$(PLATFORM)" == "WIN32"
LIBFILE = wstp32i4m.lib
!else
LIBFILE = wstp64i4m.lib
!endif
factor.exe : factor.obj
LINK factor.obj $(LIBFILE) /OUT:factor.exe @<<
$(LFLAGS)
<<
factor.obj : factor.c
CL @<< factor.c
$(CFLAGS)
<<
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)を使う)を実行して,コマンドプロンプトウィンドウを開始する.
統合開発環境のVisual Studio 2012を使う
すべてのプロジェクトに共通のステップ
1. wstp.hをWSTP Developer KitからMicrosoft Visual Studio 2012 Includeディレクトリにコピーする.
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の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ディレクトリにコピーする.
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へコピーする.
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をコピーする.
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へコピーする.
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のプロジェクトを作成する.
1. Microsoft Visual Studio 2012を起動する.
2. File ▶ 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
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. ファイル選択ウィンドウを使って次のディレクトリをブラウズする.
C:\Program Files\Wolfram Research\Mathematica\11.0\SystemFiles\Links\WSTP\DeveloperKit\Windows\WSTPExamples
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 Explorerでaddtwo.tmファイルをSource Filesフォルダにドラッグする.
13. Solution Explorerの中のaddtwoプロジェクトを一度クリックして選択する.ProjectメニューからProject ▶ Add New Itemを選ぶ.
C:\Users\<username>\documents\visual studio 2012\Projects\addtwo
Name: テキストフィールドに,addtwotm.cとタイプする.
ファイルエディタ枠で開いているaddtwotm.cファイルを閉じる.
14. Solution Explorerでaddtwoプロジェクトを右クリックし,Propertiesを選ぶ.
15. Configuration Propertiesの隣のExpand Treeボタンをクリックする.
16. Linkerの隣のExpand Treeボタンをクリックする.
18. Additional Dependenciesテキストフィールドにwstp32i4m.libと入力する.
64ビットのWindowsの場合はwstp64i4m.libを入力する.
19. Solution Explorerでaddtwo.tmをクリックする.ProjectメニューからProject ▶ Propertiesを選ぶ.
addtwo.tm Property Pagesダイアログボックスが現れる.
20. Configuration Propertiesの隣のExpand Tree ボタンをクリックする.
22. Item TypeドロップダウンをCustom Build Toolに変更する.
23. Custom Build Toolの隣のExpand Treeボタンをクリックする.
25. 一番右の枠でCommand Lineの向かいの空のボックスをクリックする.このテキストボックスに次のようにタイプする(引用符を含める): "$(VCInstallDir)\bin\wsprep.exe" "%(FullPath)" -o "$(ProjectDir)..\addtwotm.c".
64ビットのWindowsでは次を使う: "$(VCInstallDir)\bin\amd64\wsprep.exe" "%(FullPath)" -o "$(ProjectDir)..\addtwotm.c".
26. Outputsテキストの向かいのテキストフィールドに..\addtwotm.cとタイプする.
27. SolutionExplorerのaddtwoプロジェクトを右クリックし,Propertiesを選ぶ.
28. Configuration Propertiesの隣のExpand Treeボタンをクリックする.
30. Project Defaults拡張ツリーボタンをクリックする.
31. Character Setの向かいのドロップダウンメニューをNot Setに設定する.
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を再び実行する.
C:\users\<username>\documents\visual studio 2012\Projects\addtwo\addtwo\Debug
C:\users\<username>\documents\visual studio 2012\Projects\addtwo\addtwo\x64\Debug
factor.exeのプロジェクトを作成する
1. Microsoft Visual Studio 2012を起動する.
2. File ▶ New ▶ Projectをクリックする.
3. Installed ▶ Templates ▶ Visual C++を選んでWin32 Console Applicationアイコンをクリックする.
4. Locationテキストフィールドに以下をタイプする.
C:\users\<username>\documents\visual studio 2012\Projects
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 を設定する.
Win32 ドロップダウンメニューをクリックして x64 を選ぶ.
8. Solution Explorerの中のfactorプロジェクトを1度クリックして選ぶ.Project メニューからProject ▶ Add Existing Itemを選ぶ.
Add Existing Itemダイアログボックスが現れる.
9. Look inドロップダウンメニューから次のディレクトリを選ぶ.
C:\Program Files\Wolfram Research\Mathematica\11.0\SystemFiles\Links\WSTP\DeveloperKit\Windows\WSTPExamples
C:\Program Files\Wolfram Research\Mathematica\11.0\SystemFiles\Links\WSTP\DeveloperKit\Windows-x86-64\WSTPExamples
10. File name: テキストボックスにfactor.cと入力する.
11. Solution Explorerでfactorプロジェクトを右クリックし,Propertiesを選ぶ.
12. Configuration Propertiesの隣のExpand Treeボタンをクリックする.
13. Linkerの隣のExpand Treeボタンをクリックする.
15. Additional Dependenciesテキストフィールドにwstp32i4m.libとタイプする.
64ビットのWindowsではwstp64i4m.libを入力する.
16. BuildメニューからBuild ▶ Build Solutionを選ぶ.
C:\Program Files\Wolfram Research\Mathematica\11.0\SystemFiles\Links\WSTP\DeveloperKit\Windows\WSTPExamples\Debug
C:\Program Files\Wolfram Research\Mathematica\11.0\SystemFiles\Links\WSTP\DeveloperKit\Windows-x86-64\WSTPExamples\Debug
統合開発環境のVisual Studio 2010を使う
すべてのプロジェクトに共通のステップ
1. wstp.hをWSTP Developer KitからMicrosoft Visual Studio 2010 Includeディレクトリにコピーする.
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の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ディレクトリにコピーする.
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へコピーする.
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をコピーする.
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へコピーする.
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のプロジェクトを作成する.
1. Microsoft Visual Studio 2010を起動する.
2. File ▶ New ▶ Projectをクリックする.
3. Installed TemplatesでVisual C++ ▶ Win32を選び,Win32 Projectアイコンをクリックする.
4. Locationテキストフィールドに以下をタイプする.
C:\users\<username>\documents\visual studio 2010\Projects
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 を設定する.
Win32 ドロップダウンメニューをクリックして x64 を選ぶ.
7. Solution Explorerの中のaddtwoプロジェクトを1度クリックして選ぶ.Project メニューからProject ▶ Add Existing Itemを選ぶ.
Add Existing Itemダイアログボックスが現れる.
8. ファイル選択ウィンドウを使って次のディレクトリをブラウズする.
C:\Program Files\Wolfram Research\Mathematica\11.0\SystemFiles\Links\WSTP\DeveloperKit\Windows\WSTPExamples
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 Explorerでaddtwo.tmファイルをSource Filesフォルダにドラッグする.
12. Solution Explorerの中のaddtwoプロジェクトを一度クリックして選択する.ProjectメニューからProject ▶ Add New Itemを選ぶ.
C:\Users\<username>\documents\visual studio 2010\Projects\addtwo
Name: テキストフィールドに,addtwotm.cとタイプする.
ファイルエディタ枠で開いているaddtwotm.cファイルエディタを閉じる.
13. Solution Explorerでaddtwoプロジェクトを右クリックし,Propertiesを選ぶ.
14. Configuration Propertiesの隣のExpand Treeボタンをクリックする.
15. Linkerの隣のExpand Treeボタンをクリックする.
17. Additional Dependenciesテキストフィールドにwstp32i4m.libと入力する.
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ボタンをクリックする.
22. 一番右の枠でCommand Lineの向かいの空のボックスをクリックする.このテキストボックスに次のようにタイプする(引用符を含む): "$(VCInstallDir)\bin\wsprep.exe" "%(FullPath)" -o "$(ProjectDir)..\addtwotm.c".
64ビットのWindowsでは次を使う:"$(VCInstallDir)\bin\amd64\wsprep.exe" "%(FullPath)" -o "$(ProjectDir)..\addtwotm.c".
23. Outputsテキストの向かいのテキストフィールドに..\addtwotm.cとタイプする.
24. SolutionExplorerのaddtwoプロジェクトを右クリックし,Propertiesを選ぶ.
25. Configuration Propertiesの隣のExpand Treeボタンをクリックする.
27. Project Defaults拡張ツリーボタンをクリックする.
28. Character Setの向かいのドロップダウンメニューをNot Setに設定する.
29. BuildメニューからBuild ▶ Build Solutionを選ぶ.
30. プロジェクトが構築されると,Microsoft Visual Studio 2010はファイルaddtwotm.cが変更されたことを知らせるダイアログボックスを表示し,ファイルを再ロードしたいかどうかを尋ねる.Yesをクリックする.
C:\users\<username>\documents\visual studio 2010\Projects\addtwo\addtwo\Debug
C:\users\<username>\documents\visual studio 2010\Projects\addtwo\addtwo\x64\Debug
factor.exeのプロジェクトを作成する
1. Microsoft Visual Studio 2010を起動する.
2. File ▶ New ▶ Projectをクリックする.
3. Installed Templates枠で,Visual C++の隣のツリー拡張アイコンをクリックする.Win32を選ぶ.Templates枠で,Win32 Console Applicationアイコンをクリックする.
4. Locationテキストフィールドに以下をタイプする.
C:\users\<username>\documents\visual studio 2010\Projects
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 を設定する.
Win32 ドロップダウンメニューをクリックして x64 を選ぶ.
7. Solution Explorerの中のfactorプロジェクトを1度クリックして選ぶ.ProjectメニューからProject ▶ Add Existing Itemを選ぶ.
Add Existing Itemダイアログボックスが現れる.
8. Look inドロップダウンメニューから次のディレクトリを選ぶ.
C:\Program Files\Wolfram Research\Mathematica\11.0\SystemFiles\Links\WSTP\DeveloperKit\Windows\WSTPExamples
C:\Program Files\Wolfram Research\Mathematica\11.0\SystemFiles\Links\WSTP\DeveloperKit\Windows-x86-64\WSTPExamples
9. File name: テキストボックスにfactor.cと入力する.
10. Solution Explorerでfactorプロジェクトを右クリックし,Propertiesを選ぶ.
11. Configuration Propertiesの隣のExpand Treeボタンをクリックする.
12. Linkerの隣のExpand Treeボタンをクリックする.
14. Additional Dependenciesテキストフィールドにwstp32i4m.libとタイプする.
15. BuildメニューからBuild ▶ Build Solutionを選ぶ.
C:\Program Files\Wolfram Research\Mathematica\11.0\SystemFiles\Links\WSTP\DeveloperKit\Windows\WSTPExamples\Debug
C:\Program Files\Wolfram Research\Mathematica\11.0\SystemFiles\Links\WSTP\DeveloperKit\Windows-x86-64\WSTPExamples\Debug
Wolfram言語カーネルからすでに構築された例題を実行する
:Begin:
:Function: addtwo
:Pattern: AddTwo[i_Integer, j_Integer]
:Arguments: { i, j }
:ArgumentTypes: { Integer, Integer }
:ReturnType: Integer
:End:
:Evaluate: AddTwo::usage = "AddTwo[x, y] gives the sum of two machine integers x and y."
int addtwo( int i, int j)
{
return i+j;
}
int __stdcall WinMain( HINSTANCE hinstCurrent, HINSTANCE hinstPrevious, LPSTR lpszCmdLine, int nCmdShow)
{
char buff[512];
char FAR * buff_start = buff;
char FAR * argv[32];
char FAR * FAR * argv_end = argv + 32;
if( !WSInitializeIcon( hinstCurrent, nCmdShow)) return 1;
WSScanString( argv, &argv_end, &lpszCmdLine, &buff_start);
return WSMain( argv_end - argv, argv);
}
すでに構築された例題内からWolfram言語カーネルを起動する
2. PrebuiltExamplesディレクトリに変更する.
Choose a WSTP Program To Launchダイアログボックスが現れる.
5. 10桁未満の整数をタイプしEnterを押す.(他のfactor例題はタイプする整数の大きさの制約が緩い.)
Wolfram言語により返された素因数が出力され,factorはWolfram言語とのリンクを閉じる.
サポートされるリンクプロトコル
- 使用しているWSTP system additionsが,確実に最新のDeveloper Kitのものであることを確認する.WSTPの異なるバージョンのランタイムコンポーネントを使っている2つのプログラムはうまく動作しないか,最新のコンポーネントを使うよりも動作が遅くなる可能性がある.
- プログラムが動作するまでコンパイラの最適化をオフにする.これによりコンパイラはより速く,デバッグはより簡単になる.その上最適化ツールが壊れている可能性や,問題の原因になっている可能性もある.最適化されたコードはスタックを使い,コードのバグを顕にするか隠すという点で最適化されていないコードとは違うように登録される.例えば,局所変数のポインタを返すというよくある間違いは,スタックおよび登録の使用によって問題を引き起すことも起こさないこともある.
- WSTPライブラリ関数からの戻り値をチェックするか,プログラムのキーポイントでWSError()を呼び出すかする.WSTPは通常,何が悪かったのかを知らせることができる(変数に戻り値を割り当てない場合でも,デバッガの登録ウィンドウを使ってWSTP関数の戻り値をチェックすることができる.32ビットのライブラリは登録EAXでその結果を返す).
- ファイルwstp.h,wsprep.exe,wstp32i4.dll,.libインポートライブラリは適合した集合である.WSTPの前リリース,あるいはWSTPの異なるインターフェースを使っていた場合は,アプリケーションを構築する場合にコンポーネントを混ぜないように注意する必要がある.
- LinkProtocol->"TCPIP"かLinkProtocol->"TCP"を使う前に,ネットワークのコントロールパネルにTCP/IPがインストールされていることが示されていなければならない.コマンドプロンプトにtelnetとタイプしてみる.TelnetはTCP/IPがインストールされていなかったら機能しない.