GLFW设置回调函数
GLFW setting callback functions
在GLFW
中设置回调函数时使用哪个data type
我尝试设置一个函数类型void
,但给我一个compile error
。将其更改为void __stdcall
给我一个RT error
,但我如何使用GLFW
的typedef
's,如GLFW*fun
?我认为这是正确的选择。我真的需要一个示例源代码。
btw,我定义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);
但是现在,我不能在MinGW
中使用GLFW_DLL
void MouseClick(int x, int y) {
}
in main
…
int main() {
//glfw intialization...
glfwSetKeyCallback(Keyboard);
//other setters
}
但是,我怎么做呢?
GLFWmouseposfun MousePos {
}
//...
根据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 %dn", key, action);
}
int main() {
glfwInit();
glfwOpenWindow(640, 480, 0, 0, 0, 0, 0, 0, GLFW_WINDOW);
glfwSetKeyCallback(keyfun);
while(1) {
glfwSwapBuffers();
}
}
如果这段代码不工作,你可能链接到GLFW不正确。
嗯,对不起,是我的错。我只是没有注意到我在void MousePos(int x, int y)
中有这个Vec2f To_OGL_Coords(int x, int y)
,我没有包括在我的帖子中。正如我所说,它是Vec2f,我遗漏了NULL
的第3 (z)坐标,导致运行时错误。Method number 2
应该在这里起作用,和Jacob Parker的答案一样。我真的不知道这些指针如果使用不当会有什么影响。
(PS。我在二维上工作,这就是为什么我忽略了z坐标。我的坏)
相关文章:
- 以特征类型作为参数的泛型函数回调
- C# DllImport 调用非托管C++函数回调
- 为什么模板参数推导失败,std::函数回调的可变参数模板参数?
- std::包含 std::函数回调的多个包装器的向量不起作用
- 如何设置对类的私有函数的函数回调?
- 如何使用 c++11 函数回调声明多个模板参数
- sqlite3 更改函数回调参数 void* not用于 int* C++
- 如何知道 sqlite 中的函数"回调"是否返回了一些东西?
- Windows表单如何使用其他函数回调图表信息
- 如何在 c++ 结构中的 void* 变量中调用存储函数(回调)
- 将成员函数作为标准函数回调
- C++ 使用成员函数回调实现按钮
- std::函数回调,参数采用观察者模式(寄存器主题上的占位符)
- 使用可变参数模板从 Lua 函数回调 (C api) 中提取参数
- 在C++中使用派生类的静态方法作为函数回调
- 将libuv与函数结构一起使用,而不是函数回调
- 如何将函数回调传递给类成员
- c++类成员函数回调
- C++函数回调:无法从成员函数转换为函数签名
- 如何编写一个通用函数回调测试类