GetHelpBrowserLocationMetaTag Rest LinkTrail Tags First Null
Mathematica 9 is now available
 /

2.12.5 专题:MathLink 程序的可移植性

Mathematica 这一方面与 MathLink 的关联对所有的计算机系统完全一样. 但在不同计算机系统中的外部程序之间肯定有所不同.
首先,不同的计算机系统几乎总是需要不同的可执行二进制代码. 于是, 在调用 Install["prog"] 与一个能在所用的 计算机系统上执行的程序相对应.

在不同的计算机系统中安装程序

Mathematica 约定当  是一个通常文件时,Install["prog"] 就试执行它. 而当 是一个目录时,Mathematica 将寻找它之中名称与 $SystemID 一致的一个子目录,然后试执行该子目录中名为  的文件.

编绎外部程序的典型 Unix 命令

即使可执行的外部程序的二进制在不同的计算机系统中肯定不同, 但在从C语言等中得到该 二进制代码的源代码基本上相同.
为了使源代码具有可移标植性,要注意下面几点:
首先,不要使用为特殊系统提供的C语言或C运行库而不是标准C中的功能. 另外,也不要使用段或其它特殊内存模式.
包含文件 mathlink.h 含有 MathLink 库中所有函数的标准 C 原型. 当所用编绎器 不支持这些原型时,可以在 #include "mathlink.h" 前使用指令 #define MLPROTOTYPES 0 去忽略它们. 但如果所用编绎器不支持原型时, 它必须能检查所调用的 MathLink 库函数有适当的变量类型.

使用特殊 C 类型的 MathLink 函数

在一些计算机系统和编 绎器中,C 语言中的整数等价于一个长整数. 但也可 以使 C 语言中的整数与短整数等价. 但在便携式地调用 MathLink 库函数时,必须使用与函数中相同的类型.
将数据传递给 MathLink 库函数以后,这些函数就负责处理与不同计算机 系统中这些数据表示法差异有关的问题. 例如,在不同大小的机器之间传递 数据时,MathLink 就自动淹没一些字节,转换浮点格式,尽可能地 保持精度.

一般字符串的操作

在简单的 C 程序中,一般使用仅含有常规 ASCII 字符的字符串. 但在 Mathematica 中可以使用含有各类特殊字符的字符串. 这些字符在Mathematica 中用 Unicode 字符代码给出.
C语言中 char* 字符串一般仅用 8 位去保存每个字符的代码.而 Unicode 字符代码却需要 16 位. 所以函数 MLPutUnicodeString()MLGetUnicodeString() 用无符号的短整数数组工作.
当知道所用程序不涉及特殊字符时,用 MLPutByteString()MLGetByteString() 是方便的. 这些函数直接用8位字符代码表示所有字符.如果从 Mathematica 发送一个特殊字符时,就用 MLGetByteString() 将它转换成所给出的 固定代码.

产生便携式 MathLink 程序的一个注意点

计算机系统和具有基于 Unix 模式的 C 运行库的编绎器允许 MathLink 程序 有一个主程序,其形式为 main(argc, argv),它简单地调用MLMain(argc, argv).
有些计算机系统或编绎器则需要不同形式的主程序. 要知道调用 MLMain() 之前在 main() 内可以任意进行各种初始化. 但调用了 MLMain() 之后, 程序就进入了无限循环,直到链接关闭之前它与来自 Mathematica 的需求相呼应.



Any questions about topics on this page? Click here to get an individual response.Buy NowMore Information
THIS IS DOCUMENTATION FOR AN OBSOLETE PRODUCT.
SEE THE DOCUMENTATION CENTER FOR THE LATEST INFORMATION.