Ryan Dietrich wrote:

  Hi,

Greetings, I've been studying how to interface C++ and Perl using XS.
I was aware of this project, and saw that it is doing things that are
currently beyond my skillset.

I was hoping I could get a few answers.

1. What is the general approach of handling exceptions?

At the moment there is partial support for handling exceptions in XS++: by default all exceptions are caught, and the XS wrapper die()s with a message. If the exception is derived from std::exception, the message includes the text of the what() method, otherwise a generic error message is thrown. Support for propagating the complete exception object to Perl is planned but not implemented yet.

If for any reason you don't want to use XS++, you need to put a try/catch block around the XS code and handle the exceptions manually

int
foo(int bar)
  CODE:
    try [
      RETVAL = foo(bar);
    } catch (...) {
      ...
    }
  OUTPUT: RETVAL

2. How do you map multiple custom C++ objects out of a single header file
using XS?

  There are two approaches:

1 - you can split the XS code in multiple XS files and then include them all in a single top-level file, using the INCLUDE: directive; in this case you do not need to do anything special 2 - if you do it the way Wx does, you need to list all the object files for XS top-level modules in the OBJECTS MakeMaker parameter; every top-level XS file must have a different MODULE directive; one of the XS files must have a MODULE directive matching the .pm module name, and in this module you need to add this code:

// in the C section
extern "C" {
    XS( boot_SubModule1 );
    XS( boot_Another_Sub_Module );
    ...
}

// in the XS section:
BOOT:
  newXSproto( "My::_boot_SubModule1", boot_SubModule1, file, "$$" );
  ...

// in the My.pm file
_boot_SubModule1( 'My', $XS_VERSION );

Note that Wx uses a hybrid approach (multiple top-level XS files that each include multiple XS files from the XS subdirectory).

For reference, here's my post on Perlmonks (it's a little wordy).

http://perlmonks.org/?node_id=853194

HTH,
Mattia

Reply via email to