2013-04-23 168 views
1

什么data typeGLFW中设置回调函数时使用?GLFW设置回调函数

我尝试设置一个函数来键入void,但给我一个compile error。将它更改为void __stdcall会给我一个RT error,但是如何使用GLFWtypedef,例如GLFW*fun?我认为这是正确的做法。我真的需要一个示例源代码。

顺便说一句,我定义GLFW为GLFW_DLL

UPDATE

我的代码的这个样子的:

(我做到了三种方式)

原型。因为these*低于main 这个人给了我一个编译错误(无效的转换)我的其他项目

void MouseClick(int, int); 
void Keyboard(int, int); 
//... 

//appending `__stdcall` get compiled but gives me `RT error` 

void __stdcall MouseClick(int, int); 
void __stdcall Keyboard(int, int); 

,我使用GLFW_BUILD_DLL和在铸造编译MSVSglfwSetKeyCallback((GLFWkeyfun)Keyboard); 但现在,我不能与GLFW_DLL

void MouseClick(int x, int y) { 

} 
main

做在MinGW ...

int main() { 

//glfw intialization... 

glfwSetKeyCallback(Keyboard); 
//other setters 

} 

但是,我怎么做这种方式?

GLFWmouseposfun MousePos { 

} 

//... 
+0

这将有助于如果你可以给我们看一些代码。回调以及你如何设置它都会很好。 – 2013-04-23 11:36:37

+0

当然,如果您可以提供_exact_错误消息并且不进行编辑,它也会有所帮助。并且在错误所在的来源中指出。 – 2013-04-23 11:44:51

+0

@JoachimPileborg请再看一遍 – mr5 2013-04-23 12:04:24

回答

2

根据the documentation为GLFW 2.x版的原型传递给glfwSetKeyCallback什么(等)

void GLFWCALL functionname(int key, int action); 

这是一个完整的C程序将打印出关键事件:

#include <stdio.h> 
#include <GL/glfw.h> 

void GLFWCALL keyfun(int key, int action) { 
    printf("%d %d\n", key, action); 
} 

int main() { 
    glfwInit(); 
    glfwOpenWindow(640, 480, 0, 0, 0, 0, 0, 0, GLFW_WINDOW); 
    glfwSetKeyCallback(keyfun); 
    while(1) { 
     glfwSwapBuffers(); 
    } 
} 

如果此代码不起作用,您可能会错误地链接到GLFW。

2

Ahm,对不起我的错。我只是没有注意到,我有这Vec2f To_OGL_Coords(int x, int y)里面void MousePos(int x, int y),我没有包括在我的文章。 正如我所说,这是Vec2f,我遗漏了第三(z)坐标到NULL导致运行时错误。 Method number 2应该在这里工作,和Jacob Parker的答案一样。如果使用不当,我真的不知道这些指针的影响。我的工作是2D,这就是为什么我忽略了Z坐标。我的坏)