For structures I used T_PTROBJ. Unless I am missing something,
I would think you just have to change your typemap file(T_PTR -> T_PTROBJ)
and recompile.


On 12-Mar-2003 Marc Weinmann wrote:
> 
> 
> Question.. I'm working to wrap a vendor c library in Perl.  I'm a newbie..
> my typemap currently file contains one line "struct RECORD_DETAILS * T_PTR".
> It seems I've got things working using the below XS code, all compiles and
> the c functions I call are returning true.(I haven't done extensive testing
> though, but these are encouraging results for a newbie)
> 
> Within my XS file I have something like below.  This first function takes a
> pointer and sets the pointer to an opaque data structure.   I've read in a
> couple spots that using T_PTR to store a reference to a C data structure
> isn't a good, and that you should use T_PTROBJ or T_PTRREF.  It seems most
> documentation advises to use the T_PTROBJ, but I'm a bit daunted by that and
> wanted thought start with T_PTRREF.(thinking it'd be simpler and more crude)
> 
> 
> Most of the documentation I'm finding covers T_PTROBJ with examples, but not
> T_PTRREF.  Any advice/tips on how to go about changing a typemap for a C
> datastructure to T_PTRREF and what sorts of changes I'll need to make within
> my XS code?  


> 
> thanks,
> marc
> 
> 
> int record_create( opener_name, record_details )
>   char * opener_name
>   struct RECORD_DETAILS * record_details
> CODE:
>   RETVAL = record_create(opener_name, &record_details);
> OUTPUT:
>   record_details
>   RETVAL
> 
> int record_save(record_details)
>   struct RECORD_DETAILS * record_details
> CODE:
>    RETVAL = record_save(record_details);
> OUTPUT:
>   record_details
>   RETVAL

----------------------------------
E-Mail: [EMAIL PROTECTED]
Date: 13-Mar-2003
Time: 08:06:48
----------------------------------
Title: newbie ? - working w/C data structures & T_PTRREF


Question.. I'm working to wrap a vendor c library in Perl.  I'm a newbie..  my typemap currently file contains one line "struct RECORD_DETAILS * T_PTR".  It seems I've got things working using the below XS code, all compiles and the c functions I call are returning true.(I haven't done extensive testing though, but these are encouraging results for a newbie)

Within my XS file I have something like below.  This first function takes a pointer and sets the pointer to an opaque data structure.   I've read in a couple spots that using T_PTR to store a reference to a C data structure isn't a good, and that you should use T_PTROBJ or T_PTRREF.  It seems most documentation advises to use the T_PTROBJ, but I'm a bit daunted by that and wanted thought start with T_PTRREF.(thinking it'd be simpler and more crude)

Most of the documentation I'm finding covers T_PTROBJ with examples, but not T_PTRREF.  Any advice/tips on how to go about changing a typemap for a C datastructure to T_PTRREF and what sorts of changes I'll need to make within my XS code? 

thanks,
marc


int record_create( opener_name, record_details )
  char * opener_name
  struct RECORD_DETAILS * record_details
CODE:
  RETVAL = record_create(opener_name, &record_details);
OUTPUT:
  record_details
  RETVAL

int record_save(record_details)
  struct RECORD_DETAILS * record_details
CODE:
   RETVAL = record_save(record_details);
OUTPUT:
  record_details
  RETVAL

Reply via email to