将 c++ 指针返回到 perl

Posted

技术标签:

【中文标题】将 c++ 指针返回到 perl【英文标题】:Returning c++ pointers to perl 【发布时间】:2011-06-08 08:42:18 【问题描述】:

我在 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】:

因为您打印了一个十进制和一个十六进制:

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

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

【讨论】:

以上是关于将 c++ 指针返回到 perl的主要内容,如果未能解决你的问题,请参考以下文章

C++中的指针和向量

C++中值传递指针传递引用传递的总结

使用 SWIG 将 C++ 对象指针传递给 Python,而不是再次返回 C++

如何使用 Mono Project 将 C/C++ 指针传递和保存到 C#,并将它们返回

返回后指针不会从函数返回到它的引用(保持为空)C++

带有指针参数的 C++ 函数