我已经使用 OpenGL 和 glut 有一段时间了,从来没有遇到过这个问题。
我一直在尝试将 glut 库包含在我的 c++/cli 项目中,以使用它的库函数,如 glutMouseFunc 等。我的项目已经使用了 gl.h 和 glu.h。但是,我包括的那一刻:
#include <gl/glut.h>
我收到以下一串错误消息。
1>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\gl/glut.h(490): error C3641: 'glutInit_ATEXIT_HACK' : invalid calling convention '__stdcall ' for function compiled with /clr:pure or /clr:safe
1>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\gl/glut.h(490): error C2664: '__glutInitWithExit' : cannot convert parameter 3 from 'void (__cdecl *)(int)' to 'void (__cdecl *)(int)'
1> Address of a function yields __clrcall calling convention in /clr:pure and /clr:safe; consider using __clrcall in target type
1>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\gl/glut.h(507): error C3641: 'glutCreateWindow_ATEXIT_HACK' : invalid calling convention '__stdcall ' for function compiled with /clr:pure or /clr:safe
1>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\gl/glut.h(507): error C2664: '__glutCreateWindowWithExit' : cannot convert parameter 2 from 'void (__cdecl *)(int)' to 'void (__cdecl *)(int)'
1> Address of a function yields __clrcall calling convention in /clr:pure and /clr:safe; consider using __clrcall in target type
1>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\gl/glut.h(553): error C3641: 'glutCreateMenu_ATEXIT_HACK' : invalid calling convention '__stdcall ' for function compiled with /clr:pure or /clr:safe
1>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\gl/glut.h(553): error C2664: '__glutCreateMenuWithExit' : cannot convert parameter 2 from 'void (__cdecl *)(int)' to 'void (__cdecl *)(int)'
1> Address of a function yields __clrcall calling convention in /clr:pure and /clr:safe; consider using __clrcall in target type
我在其他一些地方读到,通过将项目属性(属性>配置属性>通用>通用语言运行时支持)中的 clr 支持切换到任何不是 clr:safe 或 clr:pure 的东西,类似的问题已经得到解决。
事实上,我已经尝试使用所有 4 个可用版本的 clr 支持进行编译:
公共语言运行时支持 (/clr)
纯 MSIL 公共语言运行时支持 (/clr:pure)
安全 MSIL 公共语言运行时支持 (/clr:safe)
公共语言运行时支持,旧语法 (/clr:oldSyntax)
但是我仍然收到相同的错误消息。我不知道这个问题来自哪里。我在其他项目中使用过 glut(仅限 c++),在我开始使用 c++/cli 之前从未遇到过这个问题。
任何洞察这可能是什么将不胜感激。
提前致谢,
盖伊
(顺便说一句,如果结果证明有任何相关性,我正在使用 Visual Studio 2010。)