Возврат указателей c ++ в perl - PullRequest
3 голосов
/ 08 июня 2011

У меня есть функция в 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 Ответ

5 голосов
/ 08 июня 2011

Поскольку вы печатали один в десятичном виде и один в шестнадцатеричном:

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

Perl обычно не использует указатели.Функции pack и unpack могут работать с указателями (см. Упаковка и распаковка структур C ), но обычная идиома Perl состоит в том, чтобы функция возвращала целое числовместо указателя на целое число.

...