在Dlang中传递函数指针

时间:2014-07-26 13:31:19

标签: function d

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

void onError(int code, const(char)* text) nothrow
{
}

用法:

glfwSetErrorCallback(&onError);

绑定代码:

__gshared {

    da_glfwSetErrorCallback glfwSetErrorCallback;

    ...

extern( C ) @    nogc nothrow {

    alias da_glfwSetErrorCallback = GLFWerrorfun function( GLFWerrorfun );

    ...

    alias GLFWerrorfun = void function( int, const( char )* );

我得到以下编译器错误:

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)

编译器:2.065.0

2 个答案:

答案 0 :(得分:8)

来自interfacing to C guidelines回调:

  

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

所以我认为您需要将onError函数声明为extern(C)才能使其与类型签名匹配。

答案 1 :(得分:0)

您需要用D代码声明一个函数原型:

// Function prototypes
extern (C) void onError(int, const(char)*) nothrow

extern (C) void onError(int code, const(char)* text) nothrow
{
   //your code
}

请注意,原型中只有类型。