Hi,

Completely different.

The practical restriction I was pointing out is that if you were creating an XS wrapper for a wxWidgets C++ class, the C++ class would, as Wx stands, have to be called wxSomething and the XS Perl class at least. Wx::Something.

You can call a pure Perl class what you like and you can call an XS class what you like. It is only when wrapping a wxWidgets C++ class that the naming restriction would come into play.

Hope it helps

Mark




On 20/06/2011 15:45, herbert breunung wrote:
But the module I prepare is Wx::GCL and it will be pure Perl
and Mattia was OK with it or is that something completely different?


thanks
herbert

Am 20.06.2011 01:51, schrieb Mark Dootson:
Hi,

In short, you are right - your C++ class name needs to begin with wx.

As wxPerl is a wrapper for the wxWidgets library, this isn't an issue - that
is the naming convention within the library and extensions.

If you are extending a wxWidgets base class in C++, then you need to create a
working C++ class first (which will be named wxSomething) then you can wrap
that using the standard helpers provided by wxPerl.

There are a couple of examples you could look at:

Wx::Scintilla
Wx::TreeListCtrl

These wrap fairly complex extensions so may not be that helpful for your
needs. Could you give more of a clue what you are trying to wrap or extend?

Regards

Mark


On 19/06/2011 23:07, Patcat88 wrote:
I'm trying to make a WX XS module. It seems to me, WxPerl can't tolerate
any wx derived class, that doesn't begin with "wx", I'm looking at the
code of wxPli_cpp_class_2_perl . The perl stash winds up being "wrong".
The module's package is "Foo" with Foo.xs and Foo.pm, the C++ class name
is Foo.
=========================
wxClassInfo *ci = object->GetClassInfo();
const wxChar* classname = ci->GetClassName();
=================================
returns a "Foo" string.
Doing a perl ref() on $fooobj returns "Wx::Foo".
All the perl methods from Foo dont work on $fooobj because $fooobj is a
blessed Wx::Foo not a Foo. Doing "Foo::aMethod($fooobj);" fails at
"if( !classname || sv_derived_from( scalar, CHAR_P classname ) ) " in
wxPli_sv_2_object, classname is Foo in the debugger.
wxPli_sv_2_object was called as
"Foo * THIS = (Foo *) wxPli_sv_2_object( aTHX_ ST(0), "Foo" );" inside
the post XS C code in "XS(XS_Foo_aMethod)".

So, I guess all WxPerl extensions must have a package name in Wx::
right? And why is this? What about naming conflicts inside Wx:: or a
class name collision between 2 classes with the same name in different
translation units?




Reply via email to