Josef Moellers wrote:
Reinhard Pagitsch wrote:
Josef Moellers wrote:
Hi,

I'm fairly new to the XS business. I have managed to get the skeleton up (h2xs) and have also managed to write short functions that have ints as arguments and return strings, but I'd like to pass a full Perl scalar (my $cdb = pack('C*', 0x12, 0, 0, 0, 128, 0);) and retrieve the length (6) and the bytes themselves in the C function and also return such a scalar.

How do I do that?

Thanks,

Josef



Did you looked at the eval_* functions in perlapi.pod?

eval_pv

     Tells Perl to eval the given string and return an SV* result.
     NOTE: the perl_ form of this function is deprecated.
             SV*     eval_pv(const char* p, I32 croak_on_error)

eval_sv

     Tells Perl to eval the string in the SV.
     NOTE: the perl_ form of this function is deprecated.
             I32     eval_sv(SV* sv, I32 flags)

No,

but some kind soul already pointed me at perlguts and there I found a reference to SvPV() which does exactly what I want:

void
scsi_cmd_in(fh, cmd, data_cnt)
       PerlIO *fh
       SV *cmd
       int data_cnt
PREINIT:
...
       unsigned char *scsi_cmd;
       STRLEN cmd_len;
PPCODE:
...
       scsi_cmd = SvPV(cmd, cmd_len);

Josef


Hm, than I misunderstood you, I guess.
regards,
Reinhard

Reply via email to