Hello, Rory,
Using your aStruct.h, the code below works for me. I believe the problem with 
the original code is name clash between your bigloo struct and pointer 
declarations. The struct declaration creates a type named myStruct* which masks 
your pointer type declaration using the same name.
Best Regards,Joe
 (module cstructarrays   (main main)   (extern      (include "aStruct.h")      
(type myStruct (struct (elt1::int "elt1")                         (elt2::int 
"elt2")                         (elt3::int "elt3")                         ) 
"myStruct")      (type myStructArr (pointer myStruct) "myStruct*")))

(define (main args)   (let ((arr (make-myStructArr 4)))      (do ((i 0 (+ i 
1)))   ((= i 4))   (myStruct*-elt1-set! (myStructArr-ref arr i) i))      (do 
((i 0 (+ i 1)))   ((= i 4))   (print (myStruct*-elt1 (myStructArr-ref arr 
i))))))

 
      From: Rory Mulvaney <[email protected]>
 To: [email protected] 
 Sent: Tuesday, October 13, 2015 8:22 AM
 Subject: [bigloo] how to allocate an array of C structs?
   
Bigloo community, 

I don't see a way to allocate an array of C structs.  If I have a C struct 
called "myStruct", I think I should be able to use (make-myStruct* 3) to 
return a pointer to a newly-allocated array of 3 myStructs.  However, it 
seems the only way to allocate a new C struct is to allocate them 1 at a 
time, using (myStruct* elt1 elt2 elt3).

http://www-sop.inria.fr/members/Manuel.Serrano/bigloo/doc/bigloo-28.html#The-C-interface
(see sections on Struct and Union types and section on C pointers)

This is what I have:

[aStruct.h:

typedef struct myStruct {
  int elt1;
  int elt2;
  int elt3;
} myStruct;

]//end of aStruct.h

(module aStruct
        (main testAStruct)
        (extern
        (include "aStruct.h")
        (type myStruct (struct
                        (elt1::int "elt1")
                        (elt2::int "elt2")
                        (elt3::int "elt3")
                        ) "myStruct")
        ;; automatically defined
        ;; (type myStruct* (pointer myStruct) "myStruct*")
        )
        )

(define (testAStruct argv)
  ; doesn't work                                                              
  ; (make-myStruct* 3)                                                        
  ; works                                                                      
  (myStruct* 1 2 3)

)

Thanks and regards,
Rory


   

Reply via email to