Передача указателя функции в Dlang

Я пытаюсь запустить образец OpenGL с Dlang.

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

1 ответов


С сопряжение с руководящими принципами C на вызовы:

D можно легко вызвать с ответами (указатели на функции), и C может вызвать обратные вызовы, предлагаемые в D кода, если функция обратного вызова является Экстерн(Си) функция, или какая другая связь, что обе стороны договорились (например, Экстерн(окна)).

поэтому я думаю, что тебе нужно onError функция должна быть объявлена как extern(C) для того, чтобы соответствовать сигнатуре типа.