在Dlang中传递函数指针

Gri*_*ory 6 d function

我正在尝试使用Dlang运行OpenGL示例.

void onError(int code, const(char)* text) nothrow
{
}
Run Code Online (Sandbox Code Playgroud)

用法:

glfwSetErrorCallback(&onError);
Run Code Online (Sandbox Code Playgroud)

绑定代码:

__gshared {

    da_glfwSetErrorCallback glfwSetErrorCallback;

    ...

extern( C ) @    nogc nothrow {

    alias da_glfwSetErrorCallback = GLFWerrorfun function( GLFWerrorfun );

    ...

    alias GLFWerrorfun = void function( int, const( char )* );
Run Code Online (Sandbox Code Playgroud)

我得到以下编译器错误:

Error: function pointer glfwSetErrorCallback (extern (C) void function(int, const(char)*) nothrow) is not callable using argument types (void function(int code, const(char)* text) nothrow)
Run Code Online (Sandbox Code Playgroud)

编译:2.065.0

Mik*_*ton 8

从回调到C指南接口:

D可以轻松调用C回调(函数指针),如果回调是extern(C)函数,或者双方同意的其他链接(例如extern(Windows)),C可以调用D代码提供的回调.

所以我认为你需要onError声明你的函数extern(C),以便它匹配类型签名.