2015-06-19 54 views
1

该方案。我使用软件(A),允许我使用TCL脚本(B)。因为我必须在B中做很多操作,所以我建立了一个的C代码(C)以便通过SWIG使用并进行数学运算。现在,我并行运行A,并且我可以使用A的一些内置TCL函数通过MPI发送和接收B的一些变量。 问题是其中一个变量实际上是一个C数组。使用SWIG,将C数组指针取消引用到TCL变量

我知道SWIG只交换C和TCL之间的内存地址,但发送到另一台计算机是没用的。所以我认为我必须将数组解引用为TCL变量。

有人能告诉我如何做到这一点? PS:我不太了解SWIG。

回答

1

typemaps是去这里的路。他们基本上允许你做的是给SWIG提供代码片段,这些代码片段被添加到你的包装的顶部和底部。换句话说,您可以控制分析参数的方式,以及在操作完成后如何清理。

从你的解释中,我很难分辨出你试图达到的究竟是什么。也许一些伪代码会让事情变得更清晰。我是使用Python的SWIG的用户,对TCL一无所知,所以我会试着解释我如何使用我的设置来做到这一点。

比方说,这是被包裹的功能:

double[] foo_c (double bar[], int a_size);

你想要的函数的返回值是“引用”。所以你想让函数返回非指针。在python中,让我们说我想让函数返回一个Python列表。你可以看到,大部分的代码实际上都在C/C++中,所以我拿一个Python例子并不重要。你只需要看看TCL/C API来找出你需要的功能。

希望这会有所帮助!