D callbacks in C functions

Posted by Caspin on Stack Overflow See other posts from Stack Overflow or by Caspin
Published on 2010-03-25T23:37:14Z Indexed on 2010/03/26 3:53 UTC
Read the original article Hit count: 382

Filed under:
|
|

I am writing D2 bindings for Lua. This is in one of the Lua header files.

typedef int (*lua_CFunction) (lua_State *L);

I assume the equivalent D2 statement would be:

extern(C) alias int function( lua_State* L ) lua_CFunction;

Lua also provides an api function:

void lua_pushcfunction( lua_State* L, string name, lua_CFunction func );

If I want to push a D2 function does it have to be extern(C) or can I just use the function?

int dfunc( lua_State* L )
{
   std.stdio.writeln("dfunc");
}

extern(C) int cfunc( lua_State* L )
{
   std.stdio.writeln("cfunc");
}

lua_State* L = lua_newstate();
lua_pushcfunction(L, "cfunc", &cfunc); //This will definitely work.
lua_pushcfunction(L, "dfunc", &dfunc); //Will this work?

If I can only use cfunc, why? I don't need to do anything like that in C++. I can just pass the address of a C++ function to C and everything just works.

© Stack Overflow or respective owner

Related posts about d

    Related posts about d2