1

data type在设置回调函数时使用什么GLFW

我尝试设置一个函数来输入void,但给了我一个compile error. 将其更改为void __stdcall给我一个RT error,但我如何使用诸如typedef之类的?我认为这是正确的做法。我真的需要一个示例源代码。GLFWGLFW*fun

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

更新

我的代码如下所示:

(我做了三种方式)

1

原型。因为these*低于main 这个给我一个编译错误(无效转换)

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

2

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

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

3

在我的另一个项目中,我使用GLFW_BUILD_DLL并编译MSVS了强制转换。 glfwSetKeyCallback((GLFWkeyfun)Keyboard); 但现在,我不能MinGWGLFW_DLL

void MouseClick(int x, int y) {

}

main...

int main() {

//glfw intialization...

glfwSetKeyCallback(Keyboard);
//other setters

}

但是,我该怎么做呢?

GLFWmouseposfun MousePos {

}

//...
4

2 回答 2

2

根据GLFW v2.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。

于 2013-04-23T20:09:26.230 回答
2

啊,对不起我的错。我只是没有注意到我有这个我没有包含在我的帖子中Vec2f To_OGL_Coords(int x, int y)void MousePos(int x, int y)正如我所说,正是 Vec2f 我遗漏了 3rd(z) 坐标NULL导致运行时错误。Method number 2应该在这里工作,就像雅各布帕克的回答一样。如果使用不当,我真的不太了解这些指针的影响。

(PS。我正在研究 2D,这就是为什么我忽略了 z 坐标。我的错)

于 2013-04-24T07:44:14.230 回答