digitalmars.D.learn - Function with C calling convention but D mangling
- Benjamin Thaut (9/9) Dec 23 2013 Doing lots of C interfacing lately I wonder if there is a way to create
- Dicebot (2/12) Dec 23 2013 Does extern(C) + pragma(mangle) combo work?
- Benjamin Thaut (2/14) Dec 23 2013 Yes it would, but then I would have to define some mangling for myself.
- Jacob Carlborg (7/8) Dec 27 2013 You can do something like this:
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
Dec 23 2013
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 ThautDoes extern(C) + pragma(mangle) combo work?
Dec 23 2013
Am 23.12.2013 11:59, schrieb Dicebot:On Monday, 23 December 2013 at 10:57:09 UTC, Benjamin Thaut wrote:Yes it would, but then I would have to define some mangling for myself.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 ThautDoes extern(C) + pragma(mangle) combo work?
Dec 23 2013
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
Dec 27 2013