将c ++指针返回给perl

时间:2011-06-08 08:42:19

标签: perl swig

我在C ++中有一个函数,例如:

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";  

我正确地定义了create_interface函数,因为在调用函数getField()时,接口的正确intValue被打印出来。

该计划的输出如下:

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

为什么这两个值--C ++中的指针和perl中的引用不同?我如何从推荐获得intValue? (即值22)

1 个答案:

答案 0 :(得分:5)

因为你用十进制打印了一个,用十六进制打印了一个:

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

Perl通常不使用指针。 packunpack函数可以处理指针(参见Packing and Unpacking C Structures),但正常的Perl习惯用法是让函数返回一个整数而不是指向整数的指针。