Dan's Orbiter page

Orbiter Francophone => Création Orbiter Francophone => Topic started by: DanSteph on 25 June 2007, 13:20:40

Title: [Tutorial] Installer VC Express et compiler des modules C++
Post by: DanSteph on 25 June 2007, 13:20:40

Cliquez le lien ci-dessous pour retourner au sommaire des "tutorials pour créer une DLL Orbiter"
http://orbiter.dansteph.com/forum/index.php?topic=6335.msg95352#msg95352




1-Installer VC Express et compiler des modules C++ pour Orbiter


Quel est le but de ce tutorial exactement ?

Vous aurez besoin de certains outil pour compiler les DLL et comme installer les outils de devellopement de Microsoft est un parcours du combattant (pour rester poli) ce tutorial va vous aider à installer et compiler les exemple de la SDK d'orbiter (et donc faire les votres).

Lisez TRES attentivement tout ce fil si vous n'y arrivez pas il est peu probable que vous alliez très loins en C++ de toute facon (il faut etre demmerde et attentif) :badsmile:

(Note: si après avoir tout bien lu et essayé vous avez toujours un soucis ecrivez sur le forum, on vous repondra)



Message modifié ( 25-06-2007 19:44 )
Title: Re: [Pas fini] Tutorial - Créer des modules C++ pour Orbiter
Post by: DanSteph on 25 June 2007, 13:27:24
2-Installer Visual C++ Express edition et les dernieres libraries

Visual C++ coute dans les 700 dollars, par chance Microsoft fourni une version gratuite limitée mais suffisante pour
nos besoins: VC++ 2005 express edition.

Suivez attentivement toutes les étapes ci-dessous SVP.

1-ouvrez la page http://msdn.microsoft.com/vstudio/express/downloads/
2-Au millieux de la page selectionnez comme sur l'image ci-dessous "french" et cliquez "go"

(http://orbiter.dansteph.com/screenshot/dansteph/downloadVC1.jpg)

3-Quand il vient avec "Vcsetup.exe" cliquez sur "enregistrez sous" une fois télechargé cliquez sur "executer"

4-A l'execution cochez comme sur l'image ci-dessous sinon laissez tout standard:

(http://orbiter.dansteph.com/screenshot/dansteph/downloadVC2.jpg)

Une fois fait, pour compiler sans erreur vous aurez besoin des dernières librairies de compilation, Microsoft dans ca grande logique appelle cela "Windows Server 2003 R2 Platform SDK" (sortie en 2006, pas specifique au serveur ni à une plate-forme pétrolière on ce demande quel esprit tordu a trouvé ce nom mais bon)

5- Cliquez sur ce lien: http://tinyurl.com/m3nld
6- Cliquez sur le bouton "Continue (Validation required)" si vous avec ce bouton
7- Cliquez sur "download file below" comme sur l'image ci-dessous.

(http://orbiter.dansteph.com/screenshot/dansteph/downloadSDK1.jpg)

8-Puis choisissez le download "PSDK-x86.exe" comme sur l'image ci-dessous:

(http://orbiter.dansteph.com/screenshot/dansteph/downloadSDK2.jpg)

9- Lancer l'executable et choississez toutes les options par defaut  (si ca vous pose problème vaut mieux laisser tomber maintenant ;) )

10-Ca télécharge (longtemp) mais a la fin vous devez avoir les libs installée dans "C:\Program files\Microsoft Platform SDK for windows server 2003" ou autre répertoire ca peut changer, notez ce repertoire on en aura besoin plus tard.



Message modifié ( 25-06-2007 18:54 )
Title: Re: [Pas fini] Tutorial - Créer des modules C++ (DLL) pour Orbiter
Post by: DanSteph on 25 June 2007, 15:03:38
3-Télécharger la SDK d'Orbiter

La SDK d'orbiter contient les fichier C++ pour compiler des DLL qui marchent sous orbiter, pleins d'exemples C++ et la
doc qui vous explique toutes les fonctions disponible dans la SDK.

1-Cliquez sur ce lien: http://download.orbit.m6.net/mirror.html
2-Téléchargez le fichier zip "Orbiter SDK (full)"

(http://orbiter.dansteph.com/screenshot/dansteph/OrbiterSDK1.jpg)

3- Decompressez le fichier zip sur votre disque dur en utilisant l'option "nom de répertoire de winzip" je vous conseil un chemin simple comme D:\ (donnera "D:\OrbiterSDK") ou "C:\Jeux\SDK" (donnera "C:\Jeux\SDK\OrbiterSDK")



Message modifié ( 25-06-2007 15:08 )
Title: Re: [Pas fini] Tutorial - Créer des modules C++ (DLL) pour Orbiter
Post by: DanSteph on 25 June 2007, 15:16:27
4-Regler Visual C++ express pour qu'il retrouve les ressources

Visual C++ a besoin de savoir ou il doit chercher les différentes ressources (libraries, header etc etc) pour compiler sans erreur, on n'a besoin de faire ceci qu'une seule fois, après pour chaque projet il les retrouveras. (il y a une autre methode mais celle la elle est net au moins)

1-Dans demarrer/programmes chercher "Visual C++ Express edition" et lancez "Microsoft Visual C++ 2005 Express edition"
2-Allez dans "outils/Options", devellopez (+) "Projets et solutions" et selectionnez "Répertoires de VC++"
3-Dans l'image ci-dessous selectionnez en (1) "Fichier include", cliquez sur l'icone jaune en (2) puis sur la ligne vide cliquez à droite sur le bouton, ensuite naviguez jusqu'au répertoire include de la platform SDK ca doit ressembler à l'image ci-dessous:

(http://orbiter.dansteph.com/screenshot/dansteph/OrbiterSDKR2Include1.jpg)


4- Faite la même chose pour les "Fichier bibliotheque" (selecteur en haut) et choisissez le repertoire Lib de la platform SDK, ca doit aussi ressemblez à l'image ci-dessous:

(http://orbiter.dansteph.com/screenshot/dansteph/OrbiterSDKR2lib1.jpg)


5-Recommencer pour "Fichiers Bibliotheque" et choisissez le rebertoire "Lib/IA64" de la SDK.

ATTENTION ! Il est crucial que cette ligne soit la derniere dans la liste Les autres lignes doivent être en haut mais celle la obligatoirement doit etre la derniere !!!! vous pouvez utiliser les icones fleches haut/bas pour trier les lignes.

(http://orbiter.dansteph.com/screenshot/dansteph/OrbiterSDKR2libIA64.jpg)


5- Comme on veut faire du Orbiter on va faire la même chose pour les include et lib d'Orbiter. Choisissez a nouveau  "Fichiers include" en haut et donner le repertoire "OrbiterSDK/include"

(http://orbiter.dansteph.com/screenshot/dansteph/OrbiterSDKORBInclude1.jpg)


6-Eeeet on recommence pour les fichiers "lib" d'Orbiter:

(http://orbiter.dansteph.com/screenshot/dansteph/OrbiterSDKORBlib1.jpg)


Voila, cliquez sur ok, ceci est fait une fois pour toute !

SI CA PLANTE PLUS BAS A LA COMPILATION AVEC DES "ERROR LNK" OU DES "FICHIERS NON TROUVE" ET QUE VOUS NE TROUVEZ PAS L'ERREUR PENSEZ A REGARDER ICI,PEUT ETRE AVEZ VOUS DONNE DE MAUVAIS CHEMINS OU DES BON MAIS AU MAUVAIS ENDROITS OU L'ORDRE DES LIGNES EST FAUX ? RELISEZ BIEN CE POST !



Message modifié ( 25-06-2007 16:37 )
Title: Re: [Pas fini] Tutorial - Créer des modules C++ (DLL) pour Orbiter
Post by: DanSteph on 25 June 2007, 15:39:08
4-Compiler votre premier exemple: Le ShuttlePB d'orbiter

C'est la ou la majeur partie des bonnes volonté s'arretent en général :wall:
visual studio, les libs et parametres  C++ de microsoft c'est l'usine à gaz, on pourrais arguer de la complexité et du
large champs couvert par ces libs pour expliquer cela (on pourrait réecrire un OS complet avec) mais je suis convaincu
qu'ils auraient pu faire beaucoup plus simple, en bref le plus souvent ca plante à la compilation avec des erreur de link
(LNK 2001 la terreur du débutant par exemple) (ca doit être le même mec qui organisé ca et qui a trouvé le
nom "platform server 2003", esprit tordu et compliqué :badsmile: )

Mais pas de panique, tonton Dan vous a mitonné tout ca au oignon, si vous avez bien fait les réglages du post plus haut et suivez attentivement ce qui ce passe ci-dessous ca devrais aller sans problèmes. :prof:

1-Allez dans le repertoire "Samples/ShuttlePB" de la SDK et cliquez sur "ShuttlePB.dsw"

(http://orbiter.dansteph.com/screenshot/dansteph/OrbiterSDKshuttlePb.jpg)

2-Comme les exemples on été crée avec une ancienne version de MSVC il vous demandera de les convertirs, cliquez "oui pour tout"  A NE FAIRE QU'UNE FOIS ! Par la suite vous cliquerez sur "ShuttlePB.vcproj" qui est le nouveau format des projets msvc++

(http://orbiter.dansteph.com/screenshot/dansteph/OrbiterSDKconverti.jpg)


Voila, c'est le grand moment vous allez compiler votre premier projet de DLL Orbiter... :hot:
Cliquez sur "F7" (compile)

Et bang ! :wall: (caramba encore raté)

(http://orbiter.dansteph.com/screenshot/dansteph/OrbiterSDKIError.jpg)

"Erreur C2065" "Génération: 0 a réussi" ca veut dire qu'il y a une erreur et que votre DLL n'a pas été crée.

La si vous l'aviez pas encore fait c'est le moment de brancher le cerveau et de lire attentivement: cette erreur dépend du code SHuttlePB qui utilise en l'occurence une vieille façon de declarer des variables dans les boucles. Ca dépend du projet que vous chargerez vous ne pourrez pas appliquer une solution "aveugle" (je recopie) mais il faudra comprendre ce qui ce passe. Je vous explique ci-dessous:

En C++ TOUTES les variable doivent être déclarée avec le type de variable par exemple "int" pour integer (entiere sans chiffre après la virgule) "float" pour flottante (avec chiffre après la virgule genre 2.456)
Avant quand on avait besoin d'une variable dans une boucle on pouvait la declarer directement dans la boucle:

for(int i=0;i<10;i++)

Maintenant MS c'est conformé au standard du C et la declaration doit ce faire en dehors de la boucle, donc on enleve le type (int, dword, uint) et on la declare plus haut avec le même type, je vous met plusieurs exemples:

faux:
for(int i=0;i<10;i++)

juste:
int i;
for(i=0;i<10;i++)

faux:
for(DWORD A=0;A<10;A++)

juste:
DWORD A;
for(A=0;A<10;A++)


MSVC est génial en dehors de ces petits probleme de compilation (quand on connait c'est pas genant) double cliquez dans la fenetre du bas sur la ligne "erreur C2065: 'i' : identificateur non déclaré" ceci va vous ouvrir le code source dans la fenetre principal avec la ligne ou il y a l'erreur en l'occurence celle la:

for (int i=0; i < nlift-1 && AOA[i+1] < aoa; i ++)

Editez la de tel manière:

int i;
for (i=0; i < nlift-1 && AOA[i+1] < aoa; i ++)



Voila, c'est le grand moment vous allez compiler votre premier projet de DLL Orbiter... :hot:
Cliquez sur "F7" (compile)

Et bang ! :wall: (caramba encore raté)

(http://orbiter.dansteph.com/screenshot/dansteph/OrbiterSDKmsvcrt.jpg)

"MSVCRT.lib" "LNK2005" "déjà défini"

et plus bas

"Fatal error LNK1169 un ou plusieurs symbole définis à différentes reprise ont été rencontrées"

On rebranche le cerveau j'explique... pour compiler les choses C++ transforme du texte en code machine, il va chercher les fonctions et autres ressources dans des librairies. Pour je ne sais pas quel raisons certains symboles sont défini dans plusieurs librairies souvent msvcrt.lib msvrctd.lib libc.lib libcmt.lib etc etc... donc il commence a bosser par exemple avec libc.lib, compile ok, va chercher une autre ressource dans msvcrt.lib et la bang, il retrouve un symbole qu'il avait deja=LNK2005 Error (alaaarm alaaarm)

Comme avant ca dépend des projets donc pas de solutions copier coller... toutefois sur la ligne de l'erreur au debut il nous dit quel librairie est en cause :

MSVCRT.lib : error LNK2005

On va donc exclure cette librairie des liens pour qu'il ne ce mélange pas les pinceaux, allez dans "Projet" "Propriété de ShuttlePB" devellopez (+) "Editeur de liens" et selectionnez "Entrée" La, a la ligne "Bibliothèque spécifique ignorée" tapez "MSVCRT.lib" et cliquez OK: (si la ligne erreur marquait "libc.lib" on mettrais libc.lib sur cette ligne)

(http://orbiter.dansteph.com/screenshot/dansteph/OrbiterSDKmsvcrtignore.jpg)




Vooooooilaaaaa, c'est le grand moment vous allez compiler votre premier projet de DLL Orbiter... :hot:
Cliquez sur "F7" (compile)

Si vous avez du bol ca donne ca:

(http://orbiter.dansteph.com/screenshot/dansteph/OrbiterSDKtadaa.jpg)



Message modifié ( 25-06-2007 17:43 )
Title: Re: [Pas fini] Tutorial - Créer des modules C++ (DLL) pour Orbiter
Post by: DanSteph on 25 June 2007, 17:35:33
6-Et c'est pas fini, on fait quoi maintenant ?

C'EST IMPORTANT CONTINUEZ A LIRE !!!

Maintenant si vous regardez dans le repertoire de la SDK "Samples/ShuttlePB" vous aurez un nouveau répertoire
"Debug" avec plein de caca dedans...

et dans ce fatra vous aurez.... "ShuttlePB.dll" :flower:

C'est pour ca que vous avez sué pendant tout ce fil... vous copiez cette dll dans le répertoire "modules" d'orbiter et
c'est maintenant VOTRE version, VOTRE DLL qui fera tourner le ShuttlePB. :)

Mouais :doubt: c'est pas très pratique, copiez coller à chaque modif du code ? :wonder:
On accelere la, z'ête plus un "pauvre noobs" fini les screenshots détaillé, va falloir suivre. :badsmile:

Allez dans "Projet"  "Proprieté de ShuttlePB" (+)"Proprieté de configuration" (+) Editeur de liens" et changez la ligne "Fichier de sortie" de ".\Debug/ShuttlePB" pour le chemin complet vers votre répertoire "Modules" d'Orbiter
exemple: "D:\jeux\Orbiter2006\Modules\ShuttlePB.dll"

Voila la prochaine fois la dll sera crée directement dans Orbiter prete à être testée.

IMPORTANT: DEBUG ET RELEASE !

La vous créez votre DLL en mode débug, (mise au point) le code C++ est parsemé d'information de deboguage (la dll est énorme) et toutes les optimisations du C++ sont désactivée (le code machine est beaucoup plus lent)

C'est très bien pour mettre au point votre projet mais pour la distribution ce n'est vraiment pas top. Donc quand vous aurez fini votre projet et voudrez la passer au public impatient il faudra recompiler votre DLL en mode "RELEASE" (publication)

Vous passez en mode release avec le selecteur en haut: Et vous n'oubliez pas de recompiler après !!!!

(http://orbiter.dansteph.com/screenshot/dansteph/OrbiterSDKDebugRelease.jpg)

Attention: les modes Debug et Release on chacun leurs propres setting séparé, donc les réglage que vous avec fait en debug (pour dire ou le fichier doit etre crée par exemple) ne sont pas valable pour le mode release, vous devez les refaire donc encore une fois:

Allez dans "Projet"  "Proprieté de ShuttlePB" (+)"Proprieté de configuration" (+) Editeur de liens" et changez la ligne "Fichier de sortie" remettez le chemin complet vers votre répertoire "Modules" d'Orbiter
exemple: "D:\jeux\Orbiter2006\Modules\"

TRUC: vous pouvez regler les parametres debug et release dans la page "propriété" même si vous n'êtes pas dans ce mode. En haut le selecteur "configuration" vous dit pour quel mode vous etre en train de changer les réglages.

TRUC: Comme C++ compile par "bloc" séparé pour chaque source et les "lie" entre eux à la fin (évite de recompiler tout les sources a chaque fois) vous pouvez avoir des "bloc" crée avec certain reglages qui ne sont pas les derniers que vous avez fait. Si vous avez des erreurs bizarre qui apparaissent après avoir changer des settings pensez a tout recompiler: allez dans l'option "Générez" puis "Regénérez la solution" ca va effacer tout les "bloc" déjà créer et tout recompiler. (c'est pas sensible dans le ShuttlePB qui n'a qu'un seul source)
Quand vous passer votre projet de debug en release ou l'inverse c'est aussi une bonne idée de recompiler



Message modifié ( 26-06-2007 04:28 )
Title: Re: [Tutorial] Installer VC Express et compiler des modules C++
Post by: DanSteph on 25 June 2007, 19:43:32

Cliquez le lien ci-dessous pour retourner au sommaire des "tutorials pour créer une DLL Orbiter"
http://orbiter.dansteph.com/forum/index.php?topic=6335.msg95352#msg95352




Message modifié ( 25-06-2007 19:44 )