On 11/13/14 9:49 AM, Wsdes wrote:
Hi all,
I already posted this to Code Project, but maybe you have a
solution for my problem.
I am trying to write a wrapper for a C API in D. In C I have the
following definition of a callback type:
typedef void (*Callback)(void*);
in D, this would be:
alias Callback = void function(void *);
In a struct all members are of the type Callback. In the main
function each member is assigned a function like this:
Events.OnData = MyDtaCB;
Here the MyDtaCB function has no prototype but is defined as
follows:
void MyDtaCB(void* pVoid){
// Do stuff
}
Now I tried to port this to D. The wiki says that callback
functions should be declared as integer functions, so my D code
looks like this:
extern (C) alias CEventCallback_t = int function(int, int);
extern (C) CEventCallback_t MyDtaCB(void*);
This doesn't look right. MyDtaCB is a function taking void *, that
returns a function pointer.
Can you point at the wiki you are talking about?
Here's the catch: when I try to assign the MyDtaCB function to a
member of the Events struct, I get a compilation error because
MyDtaCB is a void function and therefore returns no value. Seems
to work in C, though, but I don't know how to handle this in D.
C is a lot looser in function pointer types.
Without more context of what you are doing, it's hard to diagnose this
any further.
-Steve