[英]D callbacks in C functions
我正在為Lua編寫D2
綁定。 這是一個Lua頭文件。
typedef int (*lua_CFunction) (lua_State *L);
我假設等效的D2
語句是:
extern(C) alias int function( lua_State* L ) lua_CFunction;
Lua還提供了api功能:
void lua_pushcfunction( lua_State* L, string name, lua_CFunction func );
如果我想推送D2
功能,它必須是extern(C)還是我可以使用該功能?
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?
如果我只能使用cfunc
,為什么? 我不需要在C++
做任何類似的事情。 我可以將C++
函數的地址傳遞給C
,一切正常。
是的,該函數必須聲明為extern (C)
。
C和D中函數的調用約定是不同的,因此您必須告訴編譯器使用帶有extern (C)
的C約定。 我不知道為什么你不必在C ++中這樣做。
有關與C接口的更多信息,請參見此處 。
值得注意的是,您可以使用C樣式聲明函數參數。
是的,您的typedef翻譯是正確的。 OTOH你看過htod
工具嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.