in reply to Extending with C functions - some basic questions
One thing to understand is that Perl references and C pointers are two different things (despite the conceptual similarities). So,
1. Can I pass a reference to a string and have the C-library fill it for me so that I can de-reference it on return and get the string?
The more natural way would to be to create a new scalar value (SV) and place the C string into it, for example using newSVpv(). Then return that SV to the Perl side, where you can access it as a normal Perl string. See perlapi, perlguts and PerlGuts Illustrated.
2. Can I construct and pass a pointer to a C-struct from my perl module and have it return the struct with values filled in?
Perl doesn't have structs in the sense C has. So you have to convert the contents into an appropriate form, such as a hash with keys corresponding to the struct's fields.
3. Can I pass a pointer to a function and have the C library call it
No. See perlcall for how to do it (it comes with several examples).
See also perlxs, perlxstut and Inline::C for the big picture of how to extend Perl with C.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Extending with C functions - some basic questions
by andal (Hermit) on Dec 17, 2010 at 11:16 UTC | |
by Anonyrnous Monk (Hermit) on Dec 17, 2010 at 12:57 UTC | |
by unlinker (Monk) on Dec 17, 2010 at 13:50 UTC |