VS2003下的项目在VS2008下编译不过!解决立即给分!~

hebkkun 2007-09-30 03:14:29
如题,提示找不到它!~问题解决立即给分~
#include <gl\glaux.h> // GLaux库的头文件
...全文
2130 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
天之骄子_ 2011-04-06
  • 打赏
  • 举报
回复
各位回复的好仔细!学习。
nkgd 2007-09-30
  • 打赏
  • 举报
回复
(LPCWSTR)"没找到合适的显示模式"

不要这么写,这么写要出问题的,虽然编译可以通过。
这么写:
L"没找到合适的显示模式"
  • 打赏
  • 举报
回复

if (!(nPixelFormat = ChoosePixelFormat(hDc, &pfd)))
{ MessageBox(NULL,_T("没找到合适的显示模式"),_T("Error"),MB_OK|MB_ICONEXCLAMATION);
return FALSE;
}

nkgd 2007-09-30
  • 打赏
  • 举报
回复
你上面那个帖子里不是贴过么?
WINUSERAPI 
HWND
WINAPI
CreateWindowExA(
IN DWORD dwExStyle,
IN LPCSTR lpClassName,
IN LPCSTR lpWindowName,
IN DWORD dwStyle,
IN int X,
IN int Y,
IN int nWidth,
IN int nHeight,
IN HWND hWndParent,
IN HMENU hMenu,
IN HINSTANCE hInstance,
IN LPVOID lpParam);
WINUSERAPI
HWND
WINAPI
CreateWindowExW(
IN DWORD dwExStyle,
IN LPCWSTR lpClassName,
IN LPCWSTR lpWindowName,
IN DWORD dwStyle,
IN int X,
IN int Y,
IN int nWidth,
IN int nHeight,
IN HWND hWndParent,
IN HMENU hMenu,
IN HINSTANCE hInstance,
IN LPVOID lpParam);

#ifdef UNICODE
#define CreateWindow CreateWindowW
#else
#define CreateWindow CreateWindowA
#endif // !UNICODE

如果预处理器中定义了UNICODE,那么就是CreateWindowW ,也就是IN LPCWSTR lpClassName,否则的话就是CreateWindowA ,也就是IN LPCSTR lpClassName。你原来2003的工程应该是没有定义UNICODE的,所以CreateWindow 实际上是CreateWindowA而不是CreateWindowW,而VS2008中你的预处理器中有UNICODE的定义,所以使用的是CreateWindowW,这就造成了不一致。
要么在预处理器中去掉UNICODE的define
要么修改传入参数,使之符合UNICODE的标准,如下:
hWnd = CreateWindowEx(NULL,cc, L"OpenGL",
dwStyle|WS_CLIPCHILDREN|WS_CLIPSIBLINGS,
nX, nY,Width, Height,
NULL,NULL,hInst,NULL); // 创建窗口
ShowWindow( hWnd, SW_SHOWDEFAULT );

要么就修改CreateWindowEx为CreateWindowExA,如下:
hWnd = CreateWindowExA(NULL,cc,"OpenGL",
dwStyle|WS_CLIPCHILDREN|WS_CLIPSIBLINGS,
nX, nY,Width, Height,
NULL,NULL,hInst,NULL); // 创建窗口
ShowWindow( hWnd, SW_SHOWDEFAULT );
hebkkun 2007-09-30
  • 打赏
  • 举报
回复
谢谢楼主各位!
===>
谢谢楼上各位!
  • 打赏
  • 举报
回复
工程属性,general,character set
强制转换会出错的

要么所有字符串都用_T("")这样声明.
hebkkun 2007-09-30
  • 打赏
  • 举报
回复
谢谢楼主各位!
hebkkun 2007-09-30
  • 打赏
  • 举报
回复
//'const char [21] ' to 'LPCWSTR
//你把工程改为非unicode工程.

如何改?我是小白..

看了看LPCWSTR类型的定义:
typedef __nullterminated CONST WCHAR *LPCWSTR, *PCWSTR;


于是把它们都强制转换了,
if (!(nPixelFormat = ChoosePixelFormat(hDc, &pfd)))
{ MessageBox(NULL,"没找到合适的显示模式","Error",MB_OK|MB_ICONEXCLAMATION);
return FALSE;
}


===>

if (!(nPixelFormat = ChoosePixelFormat(hDc, &pfd)))
{ MessageBox(NULL,(LPCWSTR)"没找到合适的显示模式",(LPCWSTR)"Error",MB_OK|MB_ICONEXCLAMATION);
return FALSE;
}

错误提示不再出现...似乎也可以解决问题,
hebkkun 2007-09-30
  • 打赏
  • 举报
回复
然后我简单的将GLU.h从上面这个路径复制粘贴到最上面那个路径下,开始编译...
==>
然后我简单的将GLAux.h从上面这个路径复制粘贴到最上面那个路径下,开始编译...
--------------------------------------------------------------------------

hWnd = CreateWindowEx(NULL,cc,"OpenGL",
dwStyle|WS_CLIPCHILDREN|WS_CLIPSIBLINGS,
nX, nY,Width, Height,
NULL,NULL,hInst,NULL); // 创建窗口
ShowWindow( hWnd, SW_SHOWDEFAULT ); // 显示窗口


以上是代码片断,
vs2003中的winuser.h中的定义
IN LPCWSTR lpClassName,

vs2008中的WinUser.h中的定义
__in_opt LPCWSTR lpText,

都是LPCWSTR类型的参数,却一个可以编译过,另一个不可以,还有,如果VS2008默认库目录下不再有GLAux.h文件,
是不是意味着,从VS2008开始,不再提供对OGL的支持了?
  • 打赏
  • 举报
回复
'const char [21] ' to 'LPCWSTR

你把工程改为非unicode工程.
nkgd 2007-09-30
  • 打赏
  • 举报
回复
原来的用的不是UNICODE的,在预处理器中把UNICODE去掉就ok了,或者把你现在的char *参数的改成TCHAR *的
hebkkun 2007-09-30
  • 打赏
  • 举报
回复
我找到了,VS2008会从这个路径找包含文件,
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\gl

vs2003是放在下面这个路径下
D:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\gl

然后我简单的将GLU.h从上面这个路径复制粘贴到最上面那个路径下,开始编译...

编译...

开始报错...

Error 1 error C2664: 'MessageBoxW' : cannot convert parameter 2 from 'const char [21]' to 'LPCWSTR' d:\opengl\2008\frame.cpp 34 ogl

Error 2 error C2664: 'auxDIBImageLoadW' : cannot convert parameter 1 from 'char *' to 'LPCWSTR' d:\opengl\2008\animation.cpp 57 ogl

Error 3 error C2440: 'initializing' : cannot convert from 'char [5]' to 'LPCWSTR' d:\opengl\2008\default.cpp 80 ogl

Error 4 error C2664: 'CreateWindowExW' : cannot convert parameter 2 from 'char [5]' to 'LPCWSTR' d:\opengl\2008\default.cpp 88 ogl


又仔细看了看函数定义
第一个问题,在VS2008中,函数原型
int
WINAPI
MessageBoxW(
__in_opt HWND hWnd,
__in_opt LPCWSTR lpText,
__in_opt LPCWSTR lpCaption,
__in UINT uType);
#ifdef UNICODE
#define MessageBox MessageBoxW

在VS2003中
WINUSERAPI
HWND
WINAPI
CreateWindowExA(
IN DWORD dwExStyle,
IN LPCSTR lpClassName,
IN LPCSTR lpWindowName,
IN DWORD dwStyle,
IN int X,
IN int Y,
IN int nWidth,
IN int nHeight,
IN HWND hWndParent,
IN HMENU hMenu,
IN HINSTANCE hInstance,
IN LPVOID lpParam);
WINUSERAPI
HWND
WINAPI
CreateWindowExW(
IN DWORD dwExStyle,
IN LPCWSTR lpClassName,
IN LPCWSTR lpWindowName,
IN DWORD dwStyle,
IN int X,
IN int Y,
IN int nWidth,
IN int nHeight,
IN HWND hWndParent,
IN HMENU hMenu,
IN HINSTANCE hInstance,
IN LPVOID lpParam);

#ifdef UNICODE
#define CreateWindow CreateWindowW
#else
#define CreateWindow CreateWindowA
#endif // !UNICODE

剩下那三个报错的函数定义不贴了,想来是都"升级"了,不再支持原来的用法了;苦恼中...
  • 打赏
  • 举报
回复
需要一个lib
大概在Visual Studio 8\VC\PlatformSDK\Lib\GlAux.Lib
.h大概在
Microsoft Visual Studio 8\VC\PlatformSDK\Include\gl
nkgd 2007-09-30
  • 打赏
  • 举报
回复
用VS2003打开你的工程,右键点击"#include <gl\glaux.h>"这一行,在弹出菜单中选择“打开文档"gl\glaux.h"”,打开之后把鼠标移动到相应的tab页上,就可以知道那个文件在哪里了。
ppfly2008 2007-09-30
  • 打赏
  • 举报
回复
没有用过VS...

#include <gl\glaux.h > // GLaux库的头文件
找不到库文件一般都是项目库的头文件的路径设置的问题~~

到路径设置里面检查一下??

hebkkun 2007-09-30
  • 打赏
  • 举报
回复
我机器上同时安装有vs2003和vs2008,前者可以编译过,后者不行,从哪个地方copy,放到那个目录下?
hebkkun 2007-09-30
  • 打赏
  • 举报
回复
楼上的,那要怎么办嗫!


#include <windows.h>	// Windows的头文件
#include <mmsystem.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <assert.h>
//#include <afxwin.h>

#include <gl\gl.h> // OpenGL32库的头文件
#include <gl\glu.h> // GLu32库的头文件
#include <gl\glaux.h> // GLaux库的头文件

#pragma comment( lib, "winmm.lib")
#pragma comment( lib, "opengl32.lib") // OpenGL32连接库
#pragma comment( lib, "glu32.lib") // GLu32连接库
#pragma comment( lib, "glaux.lib") // GLaux连接库
#define KEY_DOWN(vk_code)((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)
#define IDI_ICON1 101
  • 打赏
  • 举报
回复
去别人机器上拷贝一个吧
  • 打赏
  • 举报
回复
只有 GLU.h GL.h这两个文件

65,203

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧