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?

Reply via email to