Bill, That's a very nice solution. It is both cleaner looking and preferable to track R's .h files. However, some of my routines don't have void * as the return type (two are int *), and Rdynload has
typedef void * (*DL_FUNC)(); Will this untruth mess anything up? Terry T. On 12/29/2017 10:52 AM, William Dunlap wrote: > And remove the cast on the return value of R_GETCCallable. And check > that your function is found before using it. > > #include <R.h> > #include <Rinternals.h> > #include <R_ext/Rdynload.h> > > void bdsmatrix_prod4(int nrow, int nblock, int *bsize, > double *bmat, double *rmat, > int nfrail, double *y) { > DL_FUNC fun = NULL; > if (fun==NULL) { > fun = R_GetCCallable("bdsmatrix", "bdsmatrix_prod4"); > } > if (fun==NULL) { > Rf_error("Cannot find C function 'bdsmatrix_prod4' in library > 'bdsmatrix.{so,dll}'"); > } > fun(nrow, nblock, bsize, bmat, rmat, nfrail, y); > } > > > > > Bill Dunlap > TIBCO Software > wdunlap tibco.com <http://tibco.com> > > On Fri, Dec 29, 2017 at 8:48 AM, William Dunlap <wdun...@tibco.com > <mailto:wdun...@tibco.com>> wrote: > > Try changing > static void (*fun)() = NULL; > to > DL_FUNC fun = NULL; > > Bill Dunlap > TIBCO Software > wdunlap tibco.com <http://tibco.com> > > On Fri, Dec 29, 2017 at 5:14 AM, Therneau, Terry M., Ph.D. > <thern...@mayo.edu > <mailto:thern...@mayo.edu>> wrote: > > I've recently updated the coxme package, which calls internal > routines from the > bdsmatrix package. (It is in fact mentioned as an example of this in > the > Extensions manual.) > The call connections are a blocks like this, one for each of the 9 > called C > routines. > > void bdsmatrix_prod4(int nrow, int nblock, int *bsize, > double *bmat, double *rmat, > int nfrail, double *y) { > static void (*fun)() = NULL; > if (fun==NULL) > fun = (void (*)) R_GetCCallable("bdsmatrix", "bdsmatrix_prod4"); > fun(nrow, nblock, bsize, bmat, rmat, nfrail, y); > } > > .. > > The winbuilder run is flagging all of these with > > bdsmatrix_stub.h:22:6: warning: ISO C forbids assignment between > function > pointer and 'void *' [-Wpedantic] > fun = (void (*)) R_GetCCallable("bdsmatrix", "bdsmatrix_prod4"); > > Ignore? Or should these lines have been written in a different way? > > Terry T. > > ______________________________________________ > R-devel@r-project.org <mailto:R-devel@r-project.org> mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > <https://stat.ethz.ch/mailman/listinfo/r-devel> > > > [[alternative HTML version deleted]] ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel