2

最近、DerelictGLFW に足を踏み入れ始めました。1 つはクラス、もう 1 つはWindowクラスInputHandler(ウィンドウ イベントのイベント マネージャー) です。カーソル位置のコールバックで、ウィンドウ ユーザー ポインターを取得して位置を設定しようとしましたが、コールバックと GLFW 以外の値を設定しようとするとすぐにアクセス違反エラーが発生します。GLFW は初期化され、エラーは報告されません。お時間をいただきありがとうございます。

Class Window
{
    private:
        double cursorX;

    ...other stuffs...

    @property
    void cursorX(double x) nothrow
    {
        cursorX = x;
    }
}

extern(C) void mousePosCallback(GLFWwindow* window, double x, double y)
{
    Window* _window = window.userPointer 
    //userPointer is a static function that gets the window user pointer
    //and casts it to a Window*

    _window.cursorX = x;
}

static Window* userPointer(GLFWwindow* window)
{
    return cast(Window*) glfwGetWindowUserPointer(window);
}

編集:

コールバックに追加extern(C)され、エラーが持続します。

「コールバックに入った直後」を「コールバックとGLFW以外の値を設定しようとした直後」に修正。

userPointer質問に機能を追加

4

2 に答える 2

1

mousePosCallback は extern(C) ブロックで宣言する必要があります。これは、呼び出し規約を一致させるためです。

extern (C) void mousePosCallback(GLFWwindow* window, double x, double y)
{
    Window* _window = window.userPointer 
    //userPointer is a static function that gets the window user pointer
    //and casts it to a Window*

    _window.cursorX = x;
}
于 2015-04-19T13:47:24.497 に答える
0

エラーの原因を発見したようです。ウィンドウの初期化中に、ユーザー ポインタを で設定しようとしましたthis。理由はわかりませんが、コンストラクターから呼び出されない別の関数に移動すると、問題が解決するようです。問題は解決しましたが、誰かが理由を理解するのを手伝ってくれませんか? 私にはかなり奇妙に思えます。

于 2015-04-22T12:07:05.453 に答える