[R] DLL problem when using gcc+gsl
Vumani Dlamini
dvumani at hotmail.com
Wed Apr 27 13:04:00 CEST 2005
Dear list;
This might sound a bit naive, but then I am new to linking C DLL's to R.
I have built a DLL using GCC and am able to load the DLL in R
(is.loaded("contents")==TRUE). When I include it in my function it returns
NaN for all the variables. My R function is,
dyn.load("c:/data/tempdll.dll")
is.loaded("contents")#returns TRUE
#
contents <- function(new.cases){
cases <- rep(0, length(new.cases))
case.times <- rep(0, length(new.cases))
temp <- .C("contents",
as.integer(cases),
as.double(case.times))
}
and the header of my C function is
#ifndef _DLL_H_
#define _DLL_H_
#if BUILDING_DLL
# define DLLIMPORT __declspec (dllexport)
#else /* Not BUILDING_DLL */
# define DLLIMPORT __declspec (dllimport)
#endif /* Not BUILDING_DLL */
DLLIMPORT void contents (int *cases,
double *case_times);
#endif /* _DLL_H_ */
and my C function is.
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include "dll.h"
#include <gsl/gsl_rng.h>
#include <gsl/gsl_randist.h>
void contents(int *cases,
double *case_times)
{
gsl_rng * r;
gsl_rng_env_setup();
r = gsl_rng_alloc (gsl_rng_default);
int i;
for(i = 0; i < 1000; i++)
{
cases[i] = gsl_ran_negative_binomial (r, 0.10/2.10, 0.10);
case_times[i] = gsl_ran_weibull (r, 9, 5);
}
gsl_rng_free (r);
}
I am clueless as to where it all goes wrong, as if I make the program an
executable it works.
Thanks again.
Vumani
More information about the R-help
mailing list