PDA

Visualizza la versione completa : [c++]Passaggio da vc++ 6 a visual c++ 2008


micetta2482
04-02-2010, 11:25
Salve,

ho trovato un' applicazione opensource sviluppata con visual c++ 6 che vorrei usare come punto di partenza per un mio progetto. Io uso per visual c++ 2008 e quando vado a montare il progetto me lo fa convertire nella versione corrente di visual c++ ma a tempo di compilazione mi d una serie di errori quali:
.\Terra3D.cpp(33) : fatal error C1083: Impossibile aprire il file inclusione 'gl\glaux.h': No such file or directory
bitmap.cpp
.\bitmap.cpp(63) : warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
C:\Programmi\Microsoft Visual Studio 9.0\VC\include\stdio.h(237): vedere la dichiarazione di 'fopen'
.\bitmap.cpp(168) : warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
C:\Programmi\Microsoft Visual Studio 9.0\VC\include\stdio.h(237): vedere la dichiarazione di 'fopen'
Generazione del codice in corso...
Creazione file di informazioni di visualizzazione in corso...
Microsoft Browse Information Maintenance Utility Version 9.00.30729
Copyright (C) Microsoft Corporation. All rights reserved.
BSCMAKE: error BK1506 : Impossibile aprire il file '.\Release\Terra3D.sbr': No such file or directory

Qualcuno mi sa aiutare a capire e a risolvere questi errori?

oregon
04-02-2010, 12:04
Il primo evidente ... manca quel file .h (o posto in una cartella che non raggiungibile).

Gli altri sono warning di sicurezza ... le funzioni in questione sono "non sicure" e dovresti usare le versioni "sicure" ... se non ti interessa usa _CRT_SECURE_NO_WARNINGS (oppure ignora i warning).

micetta2482
04-02-2010, 12:36
Grazie ho ignorato i warning ma ora mi d un'altra serie di errori dovuti al fatto che stata usata una libreria gl\glaux.h appunto che ora stata sostituita da #include <GL/glew.h> ed altri errori ancora quali

c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(303) : warning C4996: 'strdup': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _strdup. See online help for details.
c:\programmi\microsoft visual studio 9.0\vc\include\string.h(207): vedere la dichiarazione di 'strdup'
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(443) : error C2143: errore di sintassi: ';' mancante prima di '*'
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(443) : error C2433: 'AUX_RGBImageRec': 'inline' non consentito su dichiarazioni di dati
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(443) : error C4430: identificatore di tipo mancante, verr utilizzato int. Nota: default-int non pi supportato in C++
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(444) : error C4430: identificatore di tipo mancante, verr utilizzato int. Nota: default-int non pi supportato in C++
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(457) : error C3861: 'auxDIBImageLoad': identificatore non trovato
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(467) : error C2065: 'pImage': identificatore non dichiarato
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(469) : error C2065: 'pImage': identificatore non dichiarato
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(472) : error C2065: 'pImage': identificatore non dichiarato
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(472) : error C2065: 'pImage': identificatore non dichiarato
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(472) : error C2227: l'elemento a sinistra di '->data' deve puntare a un tipo classe, struttura, unione o generico
il tipo ''unknown-type''
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(478) : error C2065: 'pImage': identificatore non dichiarato
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(478) : error C2227: l'elemento a sinistra di '->sizeX' deve puntare a un tipo classe, struttura, unione o generico
il tipo ''unknown-type''
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(478) : error C2065: 'pImage': identificatore non dichiarato
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(478) : error C2227: l'elemento a sinistra di '->sizeY' deve puntare a un tipo classe, struttura, unione o generico
il tipo ''unknown-type''
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(478) : error C2065: 'pImage': identificatore non dichiarato
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(478) : error C2227: l'elemento a sinistra di '->data' deve puntare a un tipo classe, struttura, unione o generico
il tipo ''unknown-type''
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(482) : error C2065: 'pImage': identificatore non dichiarato
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(482) : error C2227: l'elemento a sinistra di '->data' deve puntare a un tipo classe, struttura, unione o generico
il tipo ''unknown-type''
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(483) : error C2065: 'pImage': identificatore non dichiarato
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(861) : error C2065: 'ifstream': identificatore non dichiarato
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(861) : error C2146: errore di sintassi: ';' mancante prima dell'identificatore 'inputFile'
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(861) : error C2653: 'ios' non il nome di una classe o di uno spazio dei nomi
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(861) : error C2065: 'in': identificatore non dichiarato
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(861) : error C2653: 'ios' non il nome di una classe o di uno spazio dei nomi
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(861) : error C2065: 'binary': identificatore non dichiarato
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(861) : error C2653: 'ios' non il nome di una classe o di uno spazio dei nomi
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(861) : error C2065: 'nocreate': identificatore non dichiarato
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(861) : error C3861: 'inputFile': identificatore non trovato
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(862) : error C2065: 'inputFile': identificatore non dichiarato
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(862) : error C2228: l'elemento a sinistra di '.fail' deve avere una classe, struttura o unione
il tipo ''unknown-type''
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(865) : error C2065: 'inputFile': identificatore non dichiarato
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(865) : error C2228: l'elemento a sinistra di '.seekg' deve avere una classe, struttura o unione
il tipo ''unknown-type''
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(865) : error C2653: 'ios' non il nome di una classe o di uno spazio dei nomi
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(865) : error C2065: 'end': identificatore non dichiarato
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(866) : error C2065: 'inputFile': identificatore non dichiarato
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(866) : error C2228: l'elemento a sinistra di '.tellg' deve avere una classe, struttura o unione
il tipo ''unknown-type''
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(867) : error C2065: 'inputFile': identificatore non dichiarato
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(867) : error C2228: l'elemento a sinistra di '.seekg' deve avere una classe, struttura o unione
il tipo ''unknown-type''
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(867) : error C2653: 'ios' non il nome di una classe o di uno spazio dei nomi
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(867) : error C2065: 'beg': identificatore non dichiarato
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(870) : error C2065: 'inputFile': identificatore non dichiarato
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(870) : error C2228: l'elemento a sinistra di '.read' deve avere una classe, struttura o unione
il tipo ''unknown-type''
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(871) : error C2065: 'inputFile': identificatore non dichiarato
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(871) : error C2228: l'elemento a sinistra di '.close' deve avere una classe, struttura o unione
il tipo ''unknown-type''
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(1047) : error C2664: 'CreateFontW': impossibile convertire il parametro 14 da 'const char [8]' a 'LPCWSTR'
I tipi a cui si punta sono privi di relazioni. La conversione richiede reinterpret_cast, cast di tipo C o cast di tipo funzione
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(1093) : error C2227: l'elemento a sinistra di '->data' deve puntare a un tipo classe, struttura, unione o generico
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(1096) : error C2059: errore di sintassi: '['
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(1097) : error C2143: errore di sintassi: ';' mancante prima di '{'
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(1105) : error C2275: 'TextureImage': tipo non valido come espressione
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(337): vedere la dichiarazione di 'TextureImage'
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(1105) : error C2227: l'elemento a sinistra di '->sizeX' deve puntare a un tipo classe, struttura, unione o generico
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(1105) : error C2275: 'TextureImage': tipo non valido come espressione
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(337): vedere la dichiarazione di 'TextureImage'
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(1105) : error C2227: l'elemento a sinistra di '->sizeY' deve puntare a un tipo classe, struttura, unione o generico
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(1105) : error C2275: 'TextureImage': tipo non valido come espressione
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(337): vedere la dichiarazione di 'TextureImage'
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(1105) : error C2227: l'elemento a sinistra di '->data' deve puntare a un tipo classe, struttura, unione o generico
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(1108) : error C2059: errore di sintassi: '['
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(1109) : error C2143: errore di sintassi: ';' mancante prima di '{'
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(1117) : error C2275: 'TextureImage': tipo non valido come espressione
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(337): vedere la dichiarazione di 'TextureImage'
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(1117) : error C2227: l'elemento a sinistra di '->sizeX' deve puntare a un tipo classe, struttura, unione o generico
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(1117) : error C2275: 'TextureImage': tipo non valido come espressione
c:\documents and settings\utente\desktop\renderingterreniprova\rend eringterreniprova\terra3d.cpp(337): vedere la dichiarazione di 'TextureImage'

shodan
04-02-2010, 13:34
A prima vista sembrerebbe che quella libreria sia pre standard e andrebbe rimaneggiata un bel po'.
Puoi fornire un link al progetto?

micetta2482
13-02-2010, 10:19
Molto volentieri

http://www.gldomain.com/programs/Terra3D.htm

Grazie anticipatamente per l'aiuto :ciauz:

oregon
13-02-2010, 12:27
Originariamente inviato da micetta2482
Grazie ho ignorato i warning ma ora mi d un'altra serie di errori dovuti al fatto che stata usata una libreria gl\glaux.h appunto che ora stata sostituita da #include <GL/glew.h> ...

Quelli sono file header non librerie ... la libreria e' la GLAux.lib ...

Non puoi semplicemente ignorare il file glaux.h ma devi averlo tra quelli disponibili nel percorso degli include del tuo compilatore ... evidentemente manca ...

Dopo che avrai messo a disposizione del compilatore i file

GLAux.h e GLAux.lib

dovrai inserire un

using namespace std;

all'inizio, modificare l'include <fstream.h> in <fstream> , cambiare qualche int in unsigned int ...

shodan
13-02-2010, 15:10
Dunque. Dalle richerche che ho svolto sono emerse due cose:
1) Quel progetto obsoleto dal momento che utilizza header non standard.
2) I file che sono usati, glaux.h e glaux.lib non sono pi supportati, come detto qui:
http://social.msdn.microsoft.com/Forums/en-US/windowssdk/thread/b66e5f7a-91f6-4dbe-b388-0c131008b08f

Qui c' un possibile workaround al problema e usandolo il programma compila (quarto post).
http://www.gamedev.net/community/forums/topic.asp?topic_id=275238
Oltre questo non posso dirti di pi visto che di OpenGL non ci capisco nulla.

micetta2482
13-02-2010, 16:21
Grazie mille per l'aiuto prover a fare quanto mi avete suggerito...e poi vi faccio sapere

micetta2482
13-02-2010, 16:52
Forse sbaglio in qualcosa...ho aperto il progetto con visual c++ 2008 ed ho
1) sostituito il codice del file bitmap.h con quello di bmp.h
2) il codice del file bitmap.cpp con quello di bmp.cpp
3) ho sostituito fstream.h con fstream
4) ho eliminato la riga di #include <gl\glaux.h>
5) ho ignorato i warning

e fatto tutto questo mi continua a dare degli errori in compilazione.

Shodan sicuramente tu hai molta pi esperienza di me che sono alle prime armi... mi aiuteresti spiegandomi come sei riuscito a compilare il programma?

shodan
13-02-2010, 18:42
E' stata una faticaccia.
Per prima cosa vai qui:
http://www.opengl.org/resources/libraries/glut/
e scarica questa voce: Pre-compiled Win32 for Intel GLUT 3.7 DLLs for Windows 95 & NT
Il file zip contiene cinque file che devi mettere nella cartella del progetto.
glut.lib e glut32.lib vanno aggiunti ai source files del progetto.

Poi, non devi sostituire i file, ma devi aggiungere bmp.h e bmp.cpp al progetto. (Servono per definire e usare AUX_RGBImageRec). Aggiungi bmp.cpp al progetto.

Poi cambia gli header file nel file Terra3D.cpp in questo modo.



#include <windows.h> // Header File For Windows
#include <cmath> // Header File For Windows
#include <cstdio> // Header File For Standard Input/Output
#include <cstdarg> // Header File For Variable Argument Routines ( ADD )
#include <ctime>
#include <fstream>
#include "glut.h"
#include "bitmap.h"
#include "glext.h"
#include "bmp.h"

#pragma warning(disable: 4800)
#pragma warning(disable: 4305)
#pragma warning(disable: 4244)
#pragma warning(disable: 4996) // evita gli warning di microsoft sulle funzioni insicure.

using namespace std;



Cerca la funzione LoadGLTexture nel file Terra3D.cpp, togli free(pImage->data) e free(pImage) e inserisci delete pImage ( La classe allocata usando new, non malloc e si potrebbero verificare errori di memoria, inoltre il campo data gestito dalla classe stessa).

Cerca la funzione MilkshapeModel::loadModelData() e cambia:
ifstream inputFile( filename, ios::in | ios::binary | ios::nocreate );
con

ifstream inputFile( filename, ios::in | ios::binary );

(ios::nocreate non esiste pi nello standard).
Nella stessa funzione cambia:

inputFile.read( pBuffer, fileSize );

con

inputFile.read( reinterpret_cast<char*>(pBuffer), fileSize );

per evitare un errore di compilazione.

Cambia gli header file in bitmap.cpp in questo modo:


#include <windows.h>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include "bitmap.h"

#pragma warning(disable: 4996)
using namespace std;

Per gli stessi motivi di Terra3D.cpp.
Questo per quanto riguarda il codice in se.

Poi occorre modificare un'opzione del linker per togliere glaux.lib dal progetto.
ALT+F7 -> Linker ->input -> Additional Dependencies.
Togli glaux.lib

Fatto tutto questo, a me compila e lanciando l'eseguibile da Explorer vedo l'aereo, lento, ma lo vedo.

Loading