1

data typeでコールバック関数を設定するときに何を使用しGLFWますか?

関数を type に設定しようとしvoidましたが、compile error. に変更すると がvoid __stdcall得られますが、などのRT errorをどのように使用すればよいですか? これが正しいやり方だと思います。サンプルソースコードが本当に必要です。typedefGLFWGLFW*fun

ところで、私はGLFWを次のように定義していますGLFW_DLL

アップデート

私のコードは次のようになります。

(私は3つの方法でそれをしました)

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してコンパイルします。しかし今、私はそれを 行うことはできませんMSVSglfwSetKeyCallback((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

ああ、私のせいでごめんなさい。投稿に含めていないものがVec2f To_OGL_Coords(int x, int y)中にあることに気づきませんでした。私が言ったように、実行時エラーを引き起こすのはvoid MousePos(int x, int y)、3rd(z) 座標を省略した Vec2fです。Jacob Parkerの回答と同じように、ここで機能するはずです。正しく使用されていない場合、これらのポインターの効果はあまりわかりません。NULLMethod number 2

(PS。私は2Dに取り組んでいるので、z座標を無視しました。私の悪い)

于 2013-04-24T07:44:14.230 に答える
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 に答える