www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - extern(C) function literals for stubs

reply Marco Leise <Marco.Leise gmx.de> writes:
Can I define them somehow? The use case is defining extern C
functions that contain code to load the real thing from a
library.

  nothrow extern(C) void function(int) someFunc = ???

-- 
Marco
Jan 22 2014
parent reply "bearophile" <bearophileHUGS lycos.com> writes:
Marco Leise:

 Can I define them somehow? The use case is defining extern C
 functions that contain code to load the real thing from a
 library.

   nothrow extern(C) void function(int) someFunc = ???
Perhaps you want: extern(C) nothrow void someFunc(int someArg); Bye, bearophile
Jan 22 2014
next sibling parent Marco Leise <Marco.Leise gmx.de> writes:
Am Wed, 22 Jan 2014 17:52:03 +0000
schrieb "bearophile" <bearophileHUGS lycos.com>:

 Marco Leise:
 
 Can I define them somehow? The use case is defining extern C
 functions that contain code to load the real thing from a
 library.

   nothrow extern(C) void function(int) someFunc = ???
Perhaps you want: extern(C) nothrow void someFunc(int someArg); Bye, bearophile
Thanks, but I want it to be a function pointer so I can swap it from within the function literal in the fashion of nothrow extern(C) void function(int) someFunc = (int arg) { someFunc = GetProcAddress("someFunc"); someFunc(arg); } -- Marco
Jan 22 2014
prev sibling parent Marco Leise <Marco.Leise gmx.de> writes:
Am Wed, 22 Jan 2014 17:52:03 +0000
schrieb "bearophile" <bearophileHUGS lycos.com>:

 Marco Leise:
 
 Can I define them somehow? The use case is defining extern C
 functions that contain code to load the real thing from a
 library.

   nothrow extern(C) void function(int) someFunc = ???
Perhaps you want: extern(C) nothrow void someFunc(int someArg); Bye, bearophile
Got it now. By declaring the literal stub function in a template instead I can use the normal function declaration syntax without introducing a new symbol at the definition site: { ... nothrow extern(C) void function(int) someFunc = &Stub!someFunc; ... } nothrow extern(C) auto Stub(alias func)(ParameterTypeTuple!func args) { debug printf("Loading %s...\n", func.stringof.ptr); return (func = &impl)(args); } -- Marco
Jan 22 2014