Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 手动加载OpenGL扩展LNK2005和LNK1169 我使用VisualC++和手动尝试加载OpenGL扩展。然而,由于某些原因,从Khronos组提供的头定义指针会导致链接器错误,因此我从未得到更改,甚至无法在我的OpenGL上下文中定义这些函数。下面我已经包括了我的代码的简化版本,它的结构导致了同样的问题 //Test.cpp #包括“MyGL.h” #包括 int main() { 本文中的OpenGL wiki没有很好地解释这一点,但只需执行以下操作。在cpp文件中将指针设置为null将解决此问题。 例如: PFNWGLCHOOSEPIXELFORMATARBPROC wglChoosePixelFormatARB=NULL;_Visual Studio_Opengl_Visual C++ - Fatal编程技术网

Visual studio 手动加载OpenGL扩展LNK2005和LNK1169 我使用VisualC++和手动尝试加载OpenGL扩展。然而,由于某些原因,从Khronos组提供的头定义指针会导致链接器错误,因此我从未得到更改,甚至无法在我的OpenGL上下文中定义这些函数。下面我已经包括了我的代码的简化版本,它的结构导致了同样的问题 //Test.cpp #包括“MyGL.h” #包括 int main() { 本文中的OpenGL wiki没有很好地解释这一点,但只需执行以下操作。在cpp文件中将指针设置为null将解决此问题。 例如: PFNWGLCHOOSEPIXELFORMATARBPROC wglChoosePixelFormatARB=NULL;

Visual studio 手动加载OpenGL扩展LNK2005和LNK1169 我使用VisualC++和手动尝试加载OpenGL扩展。然而,由于某些原因,从Khronos组提供的头定义指针会导致链接器错误,因此我从未得到更改,甚至无法在我的OpenGL上下文中定义这些函数。下面我已经包括了我的代码的简化版本,它的结构导致了同样的问题 //Test.cpp #包括“MyGL.h” #包括 int main() { 本文中的OpenGL wiki没有很好地解释这一点,但只需执行以下操作。在cpp文件中将指针设置为null将解决此问题。 例如: PFNWGLCHOOSEPIXELFORMATARBPROC wglChoosePixelFormatARB=NULL;,visual-studio,opengl,visual-c++,Visual Studio,Opengl,Visual C++,对于任何感兴趣的人,以下是GLEW的相关代码,其用途相同: //glew.h #ifdef GLEW_静态 #定义GLEWAPI外部 #否则 #ifdef GLEW_构建 #定义GLEWAPI外部数据规范(dllexport) #否则 #定义GLEWAPI外部规范(dllimport) #恩迪夫 #恩迪夫 #定义GLEW_FUN_导出GLEWAPI //wglew.h #定义WGLEW_GET_FUN(x)x #定义wglChoosePixelFormatARB WGLEW_GET_FUN(u_

对于任何感兴趣的人,以下是GLEW的相关代码,其用途相同:

//glew.h
#ifdef GLEW_静态
#定义GLEWAPI外部
#否则
#ifdef GLEW_构建
#定义GLEWAPI外部数据规范(dllexport)
#否则
#定义GLEWAPI外部规范(dllimport)
#恩迪夫
#恩迪夫
#定义GLEW_FUN_导出GLEWAPI
//wglew.h
#定义WGLEW_GET_FUN(x)x
#定义wglChoosePixelFormatARB WGLEW_GET_FUN(u_wglewChoosePixelFormatARB)
typedef BOOL(WINAPI*PFNWGLCHOOSEPIXELFORMATARBPROC)(HDC-HDC、const-int*piAttribIList、const-FLOAT*pfattriblist、UINT-nMaxFormats、int*piFormats、UINT*nNumFormats);
#定义WGLEW\u FUN\u导出GLEW\u FUN\u导出
WGLEW_FUN_EXPORT PFNWGLCHOOSEPIXELFORMATARBPROC_uuuwglewchoosepixelformatarb;
//glew.c
#定义glewGetProcAddress(名称)wglGetProcAddress((LPCSTR)名称)
PFNWGLCHOOSEPIXELFORMATARBPROC uu wglechoosepixelformatarb=NULL;
r=((wglChoosePixelFormatARB=(pfnwglchoosepixelformatarbroc)glewGetProcAddress((const GLubyte*)“wglChoosePixelFormatARB”)==NULL)|r;
//我将使用这个静态变量,以便在我的代码中计算
//麦格洛彭格尔
#定义wglChoosePixelFormatARB\uuu wglechoosepixelformatarb
typedef BOOL(WINAPI*PFNWGLCHOOSEPIXELFORMATARBPROC)(HDC-HDC、const-int*piAttribIList、const-FLOAT*pfattriblist、UINT-nMaxFormats、int*piFormats、UINT*nNumFormats);
外部PfnwglChoosePixelformatarbroc uu WgleChoosePixelformatarb;
//MyGLOpenGL.cpp
PFNWGLCHOOSEPIXELFORMATARBPROC uu wglechoosepixelformatarb=NULL;
wglChoosePixelFormatARB=(PFNWGLCHOOSEPIXELFORMATARBPROC)wglGetProcAddress((const GLubyte*)“wglChoosePixelFormatARB”)

本文中的OpenGL wiki没有很好地解释这一点,只需执行以下操作即可。在cpp文件中将指针设置为null将解决此问题。 例如:

PFNWGLCHOOSEPIXELFORMATARBPROC wglChoosePixelFormatARB=NULL;
对于任何感兴趣的人,以下是GLEW的相关代码,其用途相同:

//glew.h
#ifdef GLEW_静态
#定义GLEWAPI外部
#否则
#ifdef GLEW_构建
#定义GLEWAPI外部数据规范(dllexport)
#否则
#定义GLEWAPI外部规范(dllimport)
#恩迪夫
#恩迪夫
#定义GLEW_FUN_导出GLEWAPI
//wglew.h
#定义WGLEW_GET_FUN(x)x
#定义wglChoosePixelFormatARB WGLEW_GET_FUN(u_wglewChoosePixelFormatARB)
typedef BOOL(WINAPI*PFNWGLCHOOSEPIXELFORMATARBPROC)(HDC-HDC、const-int*piAttribIList、const-FLOAT*pfattriblist、UINT-nMaxFormats、int*piFormats、UINT*nNumFormats);
#定义WGLEW\u FUN\u导出GLEW\u FUN\u导出
WGLEW_FUN_EXPORT PFNWGLCHOOSEPIXELFORMATARBPROC_uuuwglewchoosepixelformatarb;
//glew.c
#定义glewGetProcAddress(名称)wglGetProcAddress((LPCSTR)名称)
PFNWGLCHOOSEPIXELFORMATARBPROC uu wglechoosepixelformatarb=NULL;
r=((wglChoosePixelFormatARB=(pfnwglchoosepixelformatarbroc)glewGetProcAddress((const GLubyte*)“wglChoosePixelFormatARB”)==NULL)|r;
//我将使用这个静态变量,以便在我的代码中计算
//麦格洛彭格尔
#定义wglChoosePixelFormatARB\uuu wglechoosepixelformatarb
typedef BOOL(WINAPI*PFNWGLCHOOSEPIXELFORMATARBPROC)(HDC-HDC、const-int*piAttribIList、const-FLOAT*pfattriblist、UINT-nMaxFormats、int*piFormats、UINT*nNumFormats);
外部PfnwglChoosePixelformatarbroc uu WgleChoosePixelformatarb;
//MyGLOpenGL.cpp
PFNWGLCHOOSEPIXELFORMATARBPROC uu wglechoosepixelformatarb=NULL;
wglChoosePixelFormatARB=(PFNWGLCHOOSEPIXELFORMATARBPROC)wglGetProcAddress((const GLubyte*)“wglChoosePixelFormatARB”)

在C和C++中,声明和定义之间有一个重要的区别。
extern <type> <symbol>;
实际上,您并没有为这些函数指针创建变量,您只是为您的程序“在目录中列出了它们”。您实际上必须在某个地方定义它们。例如,在某些编译单元中,您必须编写(没有外部)


这与初始化无关,正如EricLopushansky所暗示的,这都是关于它们被实际定义的。因为它们是全局范围,无论如何,它们都会被初始化为0,即使你没有明确地写“<代码>=0 < /Cord>”。< /P> < P>在C++和C++中声明和定义之间有一个重要的区别。关于表格的陈述

extern <type> <symbol>;
实际上,您并没有为这些函数指针创建变量,您只是为您的程序“在目录中列出了它们”。您实际上必须在某个地方定义它们。例如,在某些编译单元中,您必须编写(没有外部)


正如@EricLopushansky所暗示的,这与初始化完全无关;这是关于它们被实际定义的。因为它们是全局范围,所以它们无论如何都会被初始化为0,即使你没有明确地编写
=0

谢谢你。你的解释比我的解释要简洁得多,而且可能比我的解释更准确对于直接从OpenGL wiki复制代码时遇到相同问题的其他人,请不要想太多。谢谢。您的解释比我的解释要简洁得多,并且可能对直接从OpenGL wiki复制代码时遇到相同问题的其他人更有帮助,而不要想太多。
extern <type> <symbol>;
extern PFNWGLCHOOSEPIXELFORMATARBPROC wglChoosePixelFormatARB;
extern PFNWGLCREATECONTEXTATTRIBSARBPROC wglCreateContextAttribsARB;
PFNWGLCHOOSEPIXELFORMATARBPROC wglChoosePixelFormatARB;
PFNWGLCREATECONTEXTATTRIBSARBPROC wglCreateContextAttribsARB;