2015-06-19 32 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來找出你需要的功能。

希望這會有所幫助!