[Moscow.pm] perl xs : как передать объект класса из XS в Perl и обратно
aznaourian nikita
nikita-aznaourian на yandex.ru
Чт Июл 1 06:14:48 PDT 2010
Всем привет.
Есть класс описанный в XS :
class A {
public:
A() {a = 100;};
void check() {printf("a is %d\n", a)};
int a;
};
MODULE = Test::test1 PACKAGE = Test::test1::Package
A* A::new()
CODE:
RETVAL = new A();
OUTPUT:
RETVAL
Также описание этого класса присутствует в typemap:
TYPEMAP
A * O_OBJECT
Далее объект этого класса создается в perl:
my $cppobject = Test::test1::Package->new()
и сохраняется.
Также в perl описана функция, которая возвращает этот объект:
sub getCpp {
my ($self) = @_;
return $self->[CppOBJECT];
}
Причем Dump показал, что на данном этапе сохранненый и текущие объекты совпадают:
В какой-томомент XS дергает эту функцию и получает объект класса А.
SV* cppObject = call_getCpp();
Далее если просто кастовать SV* к A* и вызывать функцию check - то значение a выведется неправильным.
Хотя все функции вызываются нормально.
Вопрос - как нужно правильно кастовать полученный объект к нужному типу, чтобы с ним можно было работать?
Подробная информация о списке рассылки Moscow-pm