2014-07-26 4 views
5

Próbuję uruchomić próbkę OpenGL z Dlang.Przekazywanie funkcji wskaźnik w Dlang

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

Zastosowanie:

glfwSetErrorCallback(&onError); 

kod Oprawa:

__gshared { 

    da_glfwSetErrorCallback glfwSetErrorCallback; 

    ... 

extern(C) @ nogc nothrow { 

    alias da_glfwSetErrorCallback = GLFWerrorfun function(GLFWerrorfun); 

    ... 

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

i pojawia się następujący błąd kompilatora:

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) 

Compiler: 2.065.0

Odpowiedz

6

Z interfacing to C guidelines na wywołania zwrotne:

D can easily call C callbacks (function pointers), and C can call callbacks provided by D code if the callback is an extern(C) function, or some other linkage that both sides have agreed to (e.g. extern(Windows)).

Więc myślę, że trzeba czynność onError być zadeklarowane jako extern(C) w celu użycia go dopasować podpis typu.

+0

Dzięki! Teraz działa! – Grigory