私のアプリケーションからGLFW keyCallbackにデータを送信しようとしていますが、そのデータにアクセスして変更します。しかし、私が渡すものは、アプリケーションのクラッシュなしにアクセスまたは変更することはできません。私は間違って何をしていますか?この行でGLFW keycallback userpointerにデータが渡されていません
//main.cpp
typedef struct
{
string type, name;
} DebugUsrPtr;
//hot loop
{
DebugUsrPtr myPtr;
myPtr.type = "aaa";
myPtr.name = "bbb";
void *testPtr = &myPtr;
glfwSetWindowUserPointer(myWin, testPtr);
glfwSetKeyCallback(myWin, keyCallback0);
glfwSetWindowUserPointer(myWin, myWin);
}
//input.cpp
void keyCallback0(GLFWwindow *window, int key, int scancode, int action, int mods)
{
auto *myTest = static_cast<DebugUsrPtr*>(glfwGetWindowUserPointer(window));
cout << "name test = " << myTest->name << endl; // ""
myTest->name = "zzzz"; //prints "zzzz" for one frame then appcrash
}
GLFWはCライブラリです。コールバック関数は、少なくとも「extern」C ""として宣言する必要があります。 –
コールバックが関数ポインタであるため、 'extern" C "'はこの場合に役立つ効果がありません。捕捉のないラムダ式でさえ送信することは可能です。同じ引数を受け入れる関数ポインタは、そのジョブを実行します。 –