簡體   English   中英

C函數中的D回調

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM