2011-06-08 109 views
3

我有在C++函數,例如:返回C++指針到perl

void* getField(interface* p) 
{ 
    int* temp = new int(p->intValue); 
    cout<< "pointer value in c++" << temp << "value of temp = " << temp << endl; 
    return temp; 
} 

我使用SWIG以產生用於上述類包裝。現在我試圖在Perl中獲取返回的指針值。我該怎麼做??
我寫了下面的perl腳本調用的函數:

perl 
use module; 
$a = module::create_new_interface(); 
$b = module::getField(); 
print $b,"\n"; 
print $$b, "\n"; 

我ahve正確,因爲在調用函數getfield命令()接口的正確的intValue獲取打印定義的create_interface功能。

的程序的輸出是如下:

_p_void=SCALAR(0x5271b0) 
5970832 
pointer value in c++ 0x5b1b90 value of temp 22 

爲什麼兩個值 - 在C++指針和在Perl不同的參考?如何從引用中獲取intValue? (即該值22)

回答

5

因爲你在十六進制印刷一個在十進制和一個:

printf "pointer is 0x%x\n", $$b; # prints "pointer is 0x5b1b90" 

Perl不正常使用指針。 packunpack函數可以處理指針(請參閱Packing and Unpacking C Structures),但正常的Perl成語將使該函數返回一個整數而不是指向整數的指針。