c++ - GLFW 设置回调函数

标签 c++ types callback glfw

GLFW 中设置回调函数时要使用什么数据类型

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

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

更新

我的代码是这样的:

(我用了三种方式)

1

原型(prototype)。因为 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)键盘); 但是现在,我无法在 MinGW 中使用 GLFW_DLL

执行此操作
void MouseClick(int x, int y) {

}

main...

int main() {

//glfw intialization...

glfwSetKeyCallback(Keyboard);
//other setters

}

但是,我该怎么做呢?

GLFWmouseposfun MousePos {

}

//...

最佳答案

根据 the documentation对于 GLFW v2.x,您传递给 glfwSetKeyCallback(等)的原型(prototype)是

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。

关于c++ - GLFW 设置回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16168342/

相关文章:

c++ - 有没有办法在不创建变量的情况下调用需要指针的函数?

typescript - 迭代对象的通用属性,验证它是对象的属性而不是任何字符串(我从编译器收到错误)

python - 确定在 python 中表示为字符串的值的类型

c++ - 为什么 MSVC 选择 long long 作为 -2147483648 的类型?

c++ - 谁能向我解释这部分代码

c++ - 是否有一个 double 值,尽管对其应用了任何计算,它仍将保留其自身?

c++ - 为什么这个 while 在给定一个字符串时会永远循环?

c++ - 如果 std::greater<>,那么为什么是 std::less(而不是 std::lesser<>)?

javascript - 将额外参数传递给 jquery.Deferred 回调

javascript - 如何在回调中访问正确的“this”?