Всем привет.
Есть класс описанный в 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