今天调式一个小程序,使用
glTexImage3D = (PFNGLTEXIMAGE3DPROC)wglGetProcAddress("glTexImage3D");
来获取OpenGL扩展函数 glTexImage3D的地址,但是出现一个意想不到的error。
error C2065: 'wglGetProcAddress' : undeclared identifier
'wglGetProcAddress是个标准的库里面的函数,定义在WINGDI.H 里面。
奇怪的是:如果添加 #include <WINGDI.H> ,结果出现更加多的复杂错误。
而我添加 #include <windows.h> ,编译成功!
为什么我会想到添加#include <windows.h>?来自http://devmaster.net/forums/topic/2494-gl-extension-setup-question/ 的这句话”You will need to get wglGetProcAddress working to use extensions ,be sure you're including all the right files (windows.h, gl.h) and also linking with opengl32.lib. “
注意,我发现另外的一个程序在没有包含#include <windows.h>的情况下,仍能正确编译和使用wglGetProcAddress!我迷惑了!!!
让我更迷惑的是:
WINDOWS.H是一个重要的头文件。它包含了其他Windows头文件,这些头文件中最重要的和最基本的是: WINDEF.H 基本型态定义, WINNT.H 支援Unicode的型态定义,WINBASE.H Kernel函数,WINUSER.H 使用者界面函数,WINGDI.H 图形装置界面函数。
那么可以认为 WINDOWS.H里包含了WINGDI.H ,但是还是只有 #include <windows.h>才可以编译成功。这个类似的问题在http://blog.csdn.net/techtitan/article/details/5741549里也存在。我表示我不明白,谁要是知道,还请留言指教, thanks in advance~~