I am trying to call a precompiled C function that uses a struct as one of
it's arguments.
I could write a wrapper function in C, but I was hoping there is some way
to
pack fields into an array of type raw that could be passed directly to the
function.

Here is some more detail.  The C struct is simple, but has mixed types:

    struct STRUCT1 {
       long type;
       long nx;
       double *x;
       double a;
       double b;
    };
   typedef struct STRUCT1  STRUCT1_TYPE;

The C function header is

void func1( long method, STRUCT1 my_struct, double *output);

I would like to have an R list mimicking the C struct,
and then use .C to call func1 with this information, e.g.

   my.struct <- list(type=3,nx=5,x=1:5,a=2.5,b=8.3)
   my.func1( 3,  convert2raw( my.struct ),   )

where R function convert2raw would return a vector of type raw with
the fields of my.struct packed into memory just like STRUCT1, and then
I could call func1 with that vector of raws.

Can I write a convert2raw( ) function and then use
   my.func1 <- function( method, buf ) {
       a <- .C("func1", as.integer(method), as.raw(buf) , output=double(1)
)
       return(a$output)
   }


John

...........................................................................

 John P. Nolan
 Math/Stat Department
 227 Gray Hall
 American University
 4400 Massachusetts Avenue, NW
 Washington, DC 20016-8050

 [EMAIL PROTECTED]
 202.885.3140 voice
 202.885.3155 fax
 http://academic2.american.edu/~jpnolan

...........................................................................
        [[alternative HTML version deleted]]

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to