in reply to Re: Re: Perlxs help please
in thread Perlxs help please

Let me bold some things for you ;)
void
QAErrorMessage(err_code, ret_error, bufflen)
        int     err_code
        SV*     ret_error
        int     bufflen
    OUTPUT:
        ret_error
void and OUTPUT do not mix (void means no output). You should try something like
void QAErrorMessage(error_code) CASE: int err_code PREINIT: int bufflen = 256; char ret_error[bufflen]; PPCODE: { QAErrorMessage(err_code, ret_error, bufflen); XPUSHs(sv_2mortal( newSVpvn(ret_error,bufflen) )); }

MJD says "you can't just make shit up and expect the computer to know what you mean, retardo!"
I run a Win32 PPM repository for perl 5.6.x and 5.8.x -- I take requests (README).
** The third rule of perl club is a statement of fact: pod is sexy.

Replies are listed 'Best First'.
Re: Re: Re: Re: Perlxs help please
by tachyon (Chancellor) on Oct 01, 2003 at 06:59 UTC

    Actually when you use void in the XS sub declaration it does not prevent you using OUTPUT (although this is now deprecated) SV* is now preferred to void..... There are even examples of doing it that way in perlxstut.

    Older versions of this document recommended to use void return value i +n such cases. It was discovered that this could lead to segfaults in +cases when XSUB was truly void. This practice is now deprecated, and +may be not supported at some future version. Use the return value SV +* in such cases. (Currently xsubpp contains some heuristic code which + tries to disambiguate between ``truly-void'' and ``old-practice-decl +ared-as-void'' functions. Hence your code is at mercy of this heurist +ics unless you use SV * as return value.)

    cheers

    tachyon

    s&&rsenoyhcatreve&&&s&n.+t&"$'$`$\"$\&"&ee&&y&srve&&d&&print