Thread overview | ||||||
---|---|---|---|---|---|---|
|
December 23, 2013 Function with C calling convention but D mangling | ||||
---|---|---|---|---|
| ||||
Doing lots of C interfacing lately I wonder if there is a way to create a D function with C calling convention but D mangeling. I need this to place C callbacks onto functions inside D templates. Putting extern(C) before it does not work in this case. As extern(C) will also enforce C mangling I get lots of duplicate symbol errors from the linker. I know that I can work around this using mixin(string) but I wonder if there is a other solution to the problem. Kind Regards Benjamin Thaut |
December 23, 2013 Re: Function with C calling convention but D mangling | ||||
---|---|---|---|---|
| ||||
Posted in reply to Benjamin Thaut | On Monday, 23 December 2013 at 10:57:09 UTC, Benjamin Thaut wrote:
> Doing lots of C interfacing lately I wonder if there is a way to create a D function with C calling convention but D mangeling. I need this to place C callbacks onto functions inside D templates. Putting extern(C) before it does not work in this case. As extern(C) will also enforce C mangling I get lots of duplicate symbol errors from the linker. I know that I can work around this using mixin(string) but I wonder if there is a other solution to the problem.
>
> Kind Regards
> Benjamin Thaut
Does extern(C) + pragma(mangle) combo work?
|
December 23, 2013 Re: Function with C calling convention but D mangling | ||||
---|---|---|---|---|
| ||||
Posted in reply to Dicebot | Am 23.12.2013 11:59, schrieb Dicebot:
> On Monday, 23 December 2013 at 10:57:09 UTC, Benjamin Thaut wrote:
>> Doing lots of C interfacing lately I wonder if there is a way to
>> create a D function with C calling convention but D mangeling. I need
>> this to place C callbacks onto functions inside D templates. Putting
>> extern(C) before it does not work in this case. As extern(C) will also
>> enforce C mangling I get lots of duplicate symbol errors from the
>> linker. I know that I can work around this using mixin(string) but I
>> wonder if there is a other solution to the problem.
>>
>> Kind Regards
>> Benjamin Thaut
>
> Does extern(C) + pragma(mangle) combo work?
Yes it would, but then I would have to define some mangling for myself.
|
December 27, 2013 Re: Function with C calling convention but D mangling | ||||
---|---|---|---|---|
| ||||
Posted in reply to Benjamin Thaut | On 2013-12-23 12:20, Benjamin Thaut wrote: > Yes it would, but then I would have to define some mangling for myself. You can do something like this: void foo (); extern (C) pragma(mangle, foo.mangleof) void foo () { } I'm pretty sure you remove the duplication with a mixin. -- /Jacob Carlborg |
Copyright © 1999-2021 by the D Language Foundation