Всем привет.

Есть класс описанный в 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 mailing list
[email protected] | http://moscow.pm.org

Ответить