On Wednesday, 3 February 2016 at 00:37:25 UTC, Mike Parker wrote:
The parameter to the C function should be declared as
extern(C), and so should your function implementation.
extern(C) alias FuncPtr = double function(uint, const(double)*,
double*, void*);
extern(C) void takeFuncPtr(FuncPtr);
extern(C) double myfunc(uint n, const(double)* x, double* grad,
void* my_func_data) {
...
}
If you haven't done that, then this is quite possibly the root
of your problem.
Success! Couldn't have done it without your help.
I had originally had the equivalent of FuncPtr as extern(C), but
I had removed that because myfunc wouldn't compile. I hadn't
thought of putting those modifications on myfunc. Just assumed
that I did the function pointers wrong.
A few extra questions: 1) In other parts of the code I'm using
extern(System), but that doesn't work for these. Why is extern(C)
used for function pointers?, 2) You use const(double)*, in other
parts of the code I had converted the C code from const char* to
const(char*). Does it matter where the pointer * falls?