C callback receives bad pointer argument

Jacob Carlborg doob at me.com
Fri Jul 1 02:44:03 PDT 2011


On 2011-07-01 11:13, Marco Cosentino wrote:
> On 01/07/2011 00:30, Andrej Mitrovic wrote:
>> Try this:
>>
>> int
>> process (jack_nframes_t nframes, void *arg)
>>
>> ->
>>
>> extern(C) int
>> process (jack_nframes_t nframes, void *arg)
>
> Thank you Andrej, that solved the problem!
>
> Please can you biefly explain me what happens in the stack when calling
> that function with and without the "extern(C)" declaration?
>
> I think that the D language would benefit from a deep, complete and open
> guide on how to _practically_ interface with C, accounting some popular
> designs cases not just a bunch of trivial cases like using 'printf' and
> a translation table of base types.
>
> Marco

What happens without "extern(C)" is that the function will use the D 
calling convention, with it, it will use the C calling convention. The C 
code your interfacing with excepts functions and function pointers with 
the C calling convention.

See:
http://www.digitalmars.com/d/2.0/interfaceToC.html
http://www.digitalmars.com/d/2.0/htomodule.html

-- 
/Jacob Carlborg


More information about the Digitalmars-d-learn mailing list