将Mathematica中的列表传递给c ++(Mathlink)

Bat*_*tox 2 c++ wolfram-mathematica mathlink

我只想将一个整数列表传递给用C++编写的函数.我已经设置了模板(.tm)文件和所有,我可以成功调用标量参数的测试函数.使用list参数调用函数的行为就好像根本没有定义函数一样.我怀疑参数类型不匹配.

在模板文档(http://reference.wolfram.com/mathematica/ref/file/file.tm.html)中,列表的数据类型类似于"Int32List".当我使用它时,我的C++函数必须包含列表长度的超长参数.使用列表的唯一示例代码是"sumalist.tm".此示例使用IntegerList(未出现在doku中的类型).

当我使用Int32List时,mprep结果需要一个带有额外整数参数的函数(不要像在doku中写的那样长).当我使用未记录的IntegerList类型时,额外参数的类型为long.

在我使用标量类型的实验中,我遇到了类似的问题 - 在tm文件中使用"Integer"时,c ++函数被正确调用,而不能用"Integer32"识别.

"sumalist.tm"示例也使用了一个奇怪的模式(list:{___ Integer}),我没有找到任何文档.我还想了解Evaluate行的含义(我怀疑它的使用是使函数可调用而没有列表中的花括号).

那么谁知道哪些数据类型真的适合用列表调用c ++函数 - 也许还有实数...?

sak*_*kra 5

MathLink的数据类型的映射(例如,Integer32,Integer32List,...),以C/C++类型上被描述MathLink的模板文件的文档页面.

该页面不再记录旧的接口类型Integer,Real,IntegerListRealList.这些类型的映射应该不再使用,因为这些类型的映射依赖于其位长是平台和编译器相关的C类型(例如,long).使用具有显式位长的相应新类型(即,Integer32Integer64代替Integer).旧的接口类型仍记录在有些过时的MathLink参考指南中.

以下谈话幻灯片包含一个简单的MathLink示例,该示例演示如何实现MathLink函数,该函数将标量值添加到实数向量中.这可以作为一个起点.