用 C 语言开发 WSTP(Windows)
建议安装
所有编译器的 SystemAdditions 安装
CompilerAdditions Installation for Microsoft Compilers
Visual Studio 2012
1. 浏览到 Mathematica 安装的文件所在的 Windows\CompilerAdditions 文件夹(在 Windows 64 位系统则使用 Windows-x86-64\CompilerAdditions\ 文件夹). 你可以通过运行以下命令来打开一个包含这些文件夹的窗口.
explorer "C:\Program Files\Wolfram Research\Mathematica\11.0\SystemFiles\Links\WSTP\DeveloperKit\Windows\CompilerAdditions"
2. 把文件 wstp32i4.lib、wstp32i4m.lib 和 wstp32i4s.lib 拷贝到 C:\Program Files\Microsoft Visual Studio 11\VC\lib. 注意对 Windows 64 位系统而言,这些文件的名字类似 wstp64i4*. 把 wstp.h 拷贝到 C:\Program Files\Microsoft Visual Studio 11\VC\include. 最后,把 wsprep.exe 拷贝到 C:\Program Files\Microsoft Visual Studio 11\VC\bin. 注意对 Windows 64 位系统而言,你要把目标路径改为 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 文件夹(在 Windows 64 位系统则使用 Windows-x86-64\CompilerAdditions\ 文件夹). 你可以通过运行以下命令来打开一个包含这些文件夹的窗口.
explorer "C:\Program Files\Wolfram Research\Mathematica\11.0\SystemFiles\Links\WSTP\DeveloperKit\Windows\CompilerAdditions"
2. 把文件 wstp32i4.lib、wstp32i4m.lib 和 wstp32i4s.lib 拷贝到 C:\Program Files\Microsoft Visual Studio 11\VC\lib. 注意对 Windows 64 位系统而言,这些文件的名字类似 wstp64i4*. 把 wstp.h 拷贝到 C:\Program Files\Microsoft Visual Studio 11\VC\include. 最后,把 wsprep.exe 拷贝到 C:\Program Files\Microsoft Visual Studio 11\VC\bin. 注意对 Windows 64 位系统而言,你要把目标路径改为 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 开发工具包的组成部分
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 模板文件
使用微软 Visual Studio 构建 WSTP 程序
使用命令行工具
Visual Studio 2012
1. 运行 开始 ▶ 所有程序 ▶ Microsoft Visual Studio 2012 ▶ Visual Studio Tools ▶ VS2012 x86 Native Tools Command Prompt (在 Windows 64 位使用 开始 ▶ 所有程序 ▶ 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
LINK addtwo.obj addtwotm.obj wstp64i4m.lib /OUT:addtwo.exe
4. 运行 开始 ▶ 所有程序 ▶ Microsoft Visual Studio 2012 ▶ Visual Studio Tools ▶ VS2012 x86 Native Tools Command Prompt (在 Windows 64 位使用 开始 ▶ 所有程序 ▶ 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
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
LINK addtwo.obj addtwotm.obj wstp64i4m.lib /OUT:addtwo.exe
10. 从文件类型下拉列表中选择 可执行项目文件 (*.exe) 以便在文件选择器窗格中显示 .exe 文件.
13. 按 F5 或选择 调试 菜单下的 开始调试 命令开始调试.
当你完成调试并关闭该项目的解决方案时,你将被询问是否要保存 addtwo.exe 的新的解决方案, 如果你想保留你的断点和其他调试器设置请选择 确定.
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
LINK factor.obj wstp64i4m.lib /OUT:factor.exe
17. 从文件类型下拉列表中选择 可执行项目文件(*.exe) 以便在文件选择器窗格中显示 .exe 文件.
21. 在 参数 部分,点击 自变量 文本框并输入:-linklaunch.
23. 按 F5 或选择 调试 菜单下的 开始调试 命令开始调试.
24. 当执行 WSOpenArgcArgv() 时,会出现 选择 WSTP 程序 对话框. 打开 MathKernel.exe.
当你完成调试并关闭该项目的解决方案时,你将被询问是否要保存 factor.exe 的新的解决方案, 如果你想保留你的断点和其他调试器设置请选择 确定.
Visual Studio 2010
1. 运行 开始 ▶ 所有程序 ▶ Microsoft Visual Studio 2010 ▶ Visual Studio Tools ▶ Visual Studio Command Prompt (2010) (在 Windows 64 位使用 开始 ▶ 所有程序 ▶ 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
LINK addtwo.obj addtwotm.obj wstp64i4m.lib /OUT:addtwo.exe
4. 运行 开始 ▶ 所有程序 ▶ Microsoft Visual Studio 2010 ▶ Visual Studio Tools ▶ Visual Studio Command Prompt (2010) (在 Windows 64 位使用 开始 ▶ 所有程序 ▶ 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
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
LINK addtwo.obj addtwotm.obj wstp64i4m.lib /OUT:addtwo.exe
10. 从文件类型下拉列表中选择 可执行项目文件(*.exe) 以便在文件选择器窗格中显示 .exe 文件.
13. 按 F5 或选择 调试 菜单下的 开始调试 命令开始调试.
当你完成调试并关闭该项目的解决方案时,你将被询问是否要保存 addtwo.exe 的新的解决方案, 如果你想保留你的断点和其他调试器设置请选择 确定 .
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
LINK factor.obj wstp64i4m.lib /OUT:factor.exe
17. 从文件类型下拉列表中选择 可执行项目文件(*.exe) 以便在文件选择器窗格中显示 .exe 文件.
21. 在 参数 部分,点击 自变量 文本框并输入:-linklaunch.
23. 按 F5 或选择 调试 菜单下的 开始调试 命令开始调试.
24. 当执行 WSOpenArgcArgv() 时,会出现 选择 WSTP 程序 对话框. 打开 MathKernel.exe.
当你完成调试并关闭该项目的解决方案时,你将被询问是否要保存 factor.exe 的新的解决方案, 如果你想保留你的断点和其他调试器设置请选择 确定.
编译器参数选项符简短摘要
参数选项符 | 行为 |
/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()有定义,默认情况下)该应用程序不需要控制台(console),因为它会创建自己的窗口 |
/SUBSYSTEM:console | (当 main() 有定义,默认情况下)提供一个控制台(console) |
标准的系统程序库
导入库 |
用户界面 (GUI) 系统服务
|
user32.lib | 支持用户界面,诸如,视窗、信息、菜单、控制和对话框 |
gdi32.lib | 支持文本和图形绘制 |
winspool.lib | 支持打印和打印工作 |
comdlg32.lib | 支持例如打开、保存文件和打印的通用对话框 |
导入库 |
对象链接与嵌入 (OLE) 系统服务
|
ole32.lib | 支持 OLE v2 .1 |
oleaut32.lib | 支持 OLE 自动化 |
uuid.lib | 支持在 OLE 和 RPC(静态库)中使用的通用唯一标识符 |
使用程序编译工具 NMAKE
Visual Studio 2012
# 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. 运行 Start ▶ All Programs ▶ Microsoft Visual Studio 2012 ▶ Visual Studio Tools ▶ VS2012 x86 Native Tools Command Prompt (在 Windows 64 位使用 Start ▶ All Programs ▶ Microsoft Visual Studio 2012 ▶ Visual Studio Tools ▶ VS2012 x64 Cross Tools Command Prompt)) 启动命令提示符窗口.
# 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(在 Windows 64 位使用 开始 ▶ 所有程序 ▶ Microsoft Visual Studio 2012 ▶ Visual Studio Tools ▶ VS2012 x64 Cross Tools Command Prompt)启动命令提示符窗口.
Visual Studio 2010
# 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. 运行 Start ▶ All Programs ▶ Microsoft Visual Studio 2010 ▶ Visual Studio Tools ▶ Visual Studio Command Prompt (2010) (在 Windows 64 位使用 Start ▶ All Programs ▶ Microsoft Visual Studio 2010 ▶ Visual Studio Tools ▶ Visual Studio x64 Win64 Command Prompt (2010)) 启动命令提示符窗口.
# 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)(在 Windows 64 位使用 开始 ▶ 所有程序 ▶ Microsoft Visual Studio 2010 ▶ Visual Studio Tools ▶ Visual Studio x64 Win64 Command Prompt (2010))启动命令提示符窗口.
使用 Visual Studio 2012 集成开发环境
所有项目共同的步骤
1. 从 WSTP 开发工具包中把 wstp.h 复制到 Microsoft Visual Studio 2012 的 Include 目录.
32 位 Windows 开发工具包路径: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
Windows 64 位开发工具包路径:C:\Program Files\Wolfram Research\Mathematica\11.0\SystemFiles\Links\WSTP\DeveloperKit\Windows-x86-64\CompilerAdditions\wstp.h
Windows 64 位的 Visual Studio 2012 Include 目录:C:\Program Files (x86)\Microsoft Visual Studio 11\VC\Include
2. 把 .lib 文件复制到 Microsoft Visual Studio Lib 目录.
从: C:\Program Files\Wolfram Research\Mathematica\11.0\SystemFiles\Links\WSTP\DeveloperKit\Windows\CompilerAdditions\*.lib 把 wstp32i4m.lib 复制到 C:\Program Files\Microsoft Visual Studio 11\VC\Lib
从: C:\Program Files\Wolfram Research\Mathematica\11.0\AddOns\WSTP\DeveloperKit\Windows-x86-64\CompilerAdditions\*.lib 把 wstp64i4m.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.
3. 选择 Installed ▶ Templates ▶ Visual C++ 并点击 Win32 Project 图标. (在 Visual Studio 2012 更新 3,有一个错误会阻止 Win32 项目与如下所述的自定义生成工具和自定义生成步骤的正常工作. 如果使用 Win32 项目,遇到问题,则使用 Win32 Console Application 项目图标.)
C:\users\<username>\documents\visual studio 2012\Projects
5. 点击 应用程序设置. 在 附加选项 下选择 空白项目 文本框. 点击 完成.
6. 不选 Security Development Lifecycle checks 复选框. 点击 完成.
7. 若要构建 addtwo 的64位版本,点击 Win32 下拉菜单并选择 配置管理器.
在 Active solution platform,选择下拉菜单并点击 New.
会出现 New Solution Platform 对话框.
设置 New Platform: 下拉菜单中的 x64,Copy settings from: 下拉菜单的 Win32.
8. 在 解决方案资源管理 单击一下选择 addtwo 项目. 从 项目 菜单中选择 项目 ▶ 添加存在项.
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. 在 文件名称: 文本框中输入 "addtwo.c" "addtwo.tm" (由空格分开). 点击 增加.
11. 能会出现提示框询问你是否要创建一个“新规则”建立 .tm 文件. 点击 否.
12. 在 解决方案资源管理 中把 addtwo.tm 文件拖入到 源文件 文件夹.
13. 在 解决方案资源管理 单击一下选择 addtwo 项目. 从 项目 菜单中选择 项目 ▶ 添加存在项.
C:\Users\<username>\documents\visual studio 2012\Projects\addtwo
关闭在文件编辑器窗格中打开的 addtwotm.c 文件编辑器.
14. 在 解决方案资源管理 中右击 addtwo 项目,选择 属性.
16. 点击 Linker 旁的 Expand Tree 按钮.
18. 在 附加依赖 文本框中输入 wstp32i4m.lib.
对于 Windows 64 位,输入 wstp64i4m.lib.
19. 在 解决方案资源管理 中点击 addtwo.tm. 从 项目 菜单选择 项目 ▶ 添加存在项.
22. 把 Item Type 下拉变为 Custom Build Tool.
23. 点击 Custom Build Tool 旁的 Expand Tree 按钮.
25. 在命令行最右边的窗格中,单击空框,在该文本框中键入(包括引号): "$(VCInstallDir)\bin\wsprep.exe" "%(FullPath)" -o "$(ProjectDir)..\addtwotm.c".
对于 Windows 64 位使用:"$(VCInstallDir)\bin\amd64\wsprep.exe" "%(FullPath)" -o "$(ProjectDir)..\addtwotm.c".
26. 在 输出 文本框中键入:..\addtwotm.c.
27. 在 解决方案资源管理 中右击 addtwo 项目,然后选择 属性.
28. 点击 配置属性 旁的 Expand Tree 图标.
30. 点击 Project Defaults 扩展树按钮.
31. 设置下拉菜单为 Not Set,而不是 Character Set.
32. 从 Build 菜单中选择 Build ▶ Build Solution. 如果你遇到如下所示的链接器错误,那么你需要变换到如前所示的 Win32 Console Application 项目设置:
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 ==========
#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.
3. 选择 Installed ▶ Templates ▶ Visual C++ 并点击 Win32 Console Application 图标.
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. 若要构建64位版本的 factor,点击 Win32 下拉菜单并选择 Configuration.
设置 New Platform: 将下拉菜单设为 x64,Copy settings from: 设为 Win32.
8. 在 Solution Explorer 单击一下选择 factor 项目. 从 Project 菜单中选择 Project ▶ Add Existing Item.
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.
对于 Windows 64 位,输入 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 开发工具包中把 wstp.h 复制到 Microsoft Visual Studio 2010 的 Include 目录.
32 位 Windows 开发工具包路径: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
Windows 64 位开发工具包路径:C:\Program Files\Wolfram Research\Mathematica\11.0\SystemFiles\Links\WSTP\DeveloperKit\Windows-x86-64\CompilerAdditions\wstp.h
Windows 64 位的 Visual Studio 2010 Include 目录:C:\Program Files (x86)\Microsoft Visual Studio 10\VC\Include
2. 把 .lib 文件复制到 Microsoft Visual Studio Lib 目录.
从: C:\Program Files\Wolfram Research\Mathematica\11.0\SystemFiles\Links\WSTP\DeveloperKit\Windows\CompilerAdditions\ 把 wstp32i4m.lib 复制到 C:\Program Files\Microsoft Visual Studio 10\VC\Lib
从: C:\Program Files (x86)\Wolfram Research\Mathematica\11.0\AddOns\WSTP\DeveloperKit\Windows-x86-64\CompilerAdditions\ 把 wstp64i4m.lib 复制到 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.
3. 在 Installed Templates,选择 Visual C++ ▶ Win32 并点击 Win32 Project 图标.
C:\users\<username>\documents\visual studio 2010\Projects
5. 点击 应用程序设置. 在 附加选项 下选择 空白项目 文本框. 点击 完成.
6. 若要构建 addtwo 的64位版本,点击 Win32 下拉菜单并选择 配置管理器.
设置 New Platform: 为 x64, Copy settings from: 为 Win32.
7. 在 解决方案资源管理 单击一下选择 addtwo 项目. 从 项目 菜单中选择 项目 ▶ 添加存在项.
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. 在 文件名称: 文本框中输入 "addtwo.c" "addtwo.tm" (由空格分开). 点击 增加.
10. 能会出现提示框询问你是否要创建一个“新规则”建立 .tm 文件. 点击 否.
11. 在 解决方案资源管理 中把 addtwo.tm 文件拖入到 源文件 文件夹.
12. 在 解决方案资源管理 单击一下选择 addtwo 项目. 从 项目 菜单中选择 项目 ▶ 添加存在项.
C:\Users\<username>\documents\visual studio 2010\Projects\addtwo
关闭在文件编辑器窗格中打开的 addtwotm.c 文件编辑器.
13. 在 解决方案资源管理 中右击 addtwo 项目,选择 属性.
15. 点击 Linker 旁的 Expand Tree 按钮.
17. 在 附加依赖 文本框中输入 wstp32i4m.lib.
对于 Windows 64 位,输入 wstp64i4m.lib.
18. 在 解决方案资源管理 中点击 addtwo.tm. 从 项目 菜单选择 项目 ▶ 添加存在项.
20. 点击 Custom Build Step 中的 Expand Tree 按钮.
22. 在命令行最右边的窗格中,单击空框,在该文本框中键入(包括引号):"$(VCInstallDir)\bin\wsprep.exe" "%(FullPath)" -o "$(ProjectDir)..\addtwotm.c".
对于 Windows 64 位,使用: "$(VCInstallDir)\bin\amd64\wsprep.exe" "%(FullPath)" -o "$(ProjectDir)..\addtwotm.c".
23. 在 输出 文本框中键入:..\addtwotm.c.
24. 在 解决方案资源管理 中右击 addtwo 项目,然后选择 属性.
25. 点击 配置属性 旁的 Expand Tree 图标.
27. 点击 Project Defaults 扩展树按钮.
28. 设置下拉菜单为 Not Set,而不是 Character 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.
3. 在 Installed Templates 窗格中,点击 Visual C++ 旁的树扩展图标. 选择 Win32. 在 Templates 窗格中,点击 Win32 Console Application 图标.
C:\users\<username>\documents\visual studio 2010\Projects
出现 Win32 Application Wizard 对话框.
5. 点击 Application Settings. 在 Additional options 设置中,点击 Empty Project 文本框.
6. 若要构建64位版本的 factor,点击 Win32 下拉菜单并选择 Configuration.
设置 New Platform: 将下拉菜单设为 x64,Copy settings from: 设为 Win32.
7. 在 Solution Explorer 单击一下选择 factor 项目. 从 Project 菜单中选择 Project ▶ Add Existing Item.
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\WSTPExamples\Debug
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 语言内核
5. 键入一个少于10个数字的整数,然后按 Enter. (其他 factor 例子会放宽对输入的整数大小的限制.)
会输出由 Wolfram 语言返回的素因子,并且 "factor" 关闭和 Wolfram 语言的链接.
支持的链接协议
- 一旦你的程序正常工作,就可关闭编译器优化功能. 这可使编译速度更快,更容易调试,此外,优化可能被中断,且导致一些问题.(优化代码使用的堆栈和寄存器的方式不同于非优化的代码,可能暴露或掩盖代码中的错误. 例如,返回一个局部变量指针时出现的常见错误可能会或不会导致问题,其取决于堆栈和寄存器使用.)
- 检查从 WSTP 库函数的返回值或在你的程序关键部分调用 WSError(). WSTP 往往可以告诉你什么地方出了错.(如果你不给一个变量指定返回值,你仍然可以使用调试器的寄存器窗口检查 WSTP 函数的返回值. 32 位程序库在 EAX 寄存器中返回结果.)
- 这些文件 wstp.h、wsprep.exe、"wstp32i4.dll" 和 .lib 导入库是互相匹配的一组. 如果你使用 WSTP 的早期版本,或不同的 WSTP 接口,当建立你的应用程序时,应该注意不要混淆它们.
- 在你使用 LinkProtocol->"TCPIP" 或 LinkProtocol->"TCP" 之前,网络控制面板必须显示已经安装 TCP/IP. 试着在命令提示符处敲入 telnet. 若没有安装 TCP/IP,Telnet 将无法正常运行.