对于我正在尝试编写的应用程序,我需要能够在interface
中写入GLEnable(GL_REPEAT)
(得到这个工作)。一旦用户这样做,系统应该用正确的参数调用该函数。带参数的Void *函数
对于这一点,我使用以下变量来获得正确的功能:
std::map<std::string, void(*)(GLenum)> glEnableDisable;
并通过存储在它的数据:
glEnableDisable["glEnable"] = glEnable;
glEnableDisable["glDisable"] = glDisable;
(注意上面给出警告“'='不能从'void(__stdcall *)(GLenum)'转换为'void(__cdecl *)(GLenum)'”)
最后,调用函数通过:
((void (*)(GLenum)) Main.glEnableDisable[SplittedUp[0]])(Parameter);
现在,我不知道我做错了。我有这个没有参数工作正常,但我真的需要这个参数。
由于提前,
乔伊
这是从来没有真正的“工作正常”不带参数。你很幸运,你没有因为使用错误的调用约定而崩溃('__stdcall'与'__cedcl') – PaulMcKenzie
__stdcall来自Visual Studio给出的警告。它不是我的代码的一部分(我试图从OpenGL调用glEnable函数) –
忽略警告给自己的危险。你应该问自己(或者stackoverflow)什么是__stdcall什么是__cdecl,为什么VS会警告我甚至不在我的代码中的东西?甚至在尝试运行任何东西之前。 –