在data type
中设置回调函数时要使用的GLFW
?
我尝试设置一个函数来键入void
但是给了我一个compile error
。将其更改为void __stdcall
会为我提供RT error
,但如何使用typedef
GLFW
等GLFW*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);
但现在,我无法使用MinGW
GLFW_DLL
中执行此操作
void MouseClick(int x, int y) {
}
在main
... 中
int main() {
//glfw intialization...
glfwSetKeyCallback(Keyboard);
//other setters
}
但是,我该怎么办呢?
GLFWmouseposfun MousePos {
}
//...
答案 0 :(得分:2)
根据GLFW v2.x的the documentation,您传递给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。
答案 1 :(得分:2)
Vec2f To_OGL_Coords(int x, int y)
内void MousePos(int x, int y)
我没有包含在帖子中。
正如我所说的那样,Vec2f将第3(z)坐标遗漏给NULL
导致运行时错误。 Method number 2
应该在这里工作,就像Jacob Parker的回答一样。如果使用不当,我真的不太了解那些指针的效果。
(PS。我正在研究2D,这就是为什么我忽略了z坐标。我的坏)