epineurien
Messages postés83Date d'inscriptionsamedi 21 mai 2005StatutMembreDernière intervention22 mars 2011
-
13 avril 2008 à 18:18
epineurien
Messages postés83Date d'inscriptionsamedi 21 mai 2005StatutMembreDernière intervention22 mars 2011
-
16 avril 2008 à 11:27
Bonjour à tous !
Je suis passé il y a quelques jours de Masm32 à Visual Studio 2008 et j'ai (comme d'hab.) quelques problêmes.
Tant qu'il s'agit d'afficher un bon vieux 'hello world' en pur C , ca va . Mais dès que j'essaye d'insérer de l'asm , la galère commençe.
J'ai déjà résolut une partie des problêmes , mais il y a deux messages qui résistent <strike>encore et toujours à l'envahisseur</strike> à mes recherches.
Voilà les codes : (je me suis basé sur les exemples 'EuclidStep2' & co. trouvé sur MSDN)
demonstration.cpp :
#include "Test.asm" // le fichier asm
void Truc(void); //équivalent d'un PROTO en C++
int main(int argc, char* argv[])
{
Truc(); //le programme ne fait rien , c'est juste pour voir si ça marche
return 0;
}
Test.asm :
.686
.MODEL FLAT,C
.STACK 4096
Truc PROTO
.code
Truc PROC
xor eax,eax
xor ebx,ebx
xor ecx,ecx
xor edx,edx
ret
Truc ENDP
END
Les erreurs sont :
Test.asm(1) : error C2059: erreur de syntaxe : 'constant' ; apparement '.686' ne lui plait pas (et pareil pour '.386' , '.586' ,...)
.\Demonstration.cpp(6) : error C3861: 'Truc' : identificateur introuvable ;apparement ma déclaration de fonction lui plait pas plus .
Donc si l'un de vous est un utilisateur de VS C++ , est-ce qu'il pourrait m'expliquer ce qui ne vas pas ?
D'avance merci !
Jetez un coup d'oeil à mon projet de moteur 3D par lancer de rayons :
epineurien
Messages postés83Date d'inscriptionsamedi 21 mai 2005StatutMembreDernière intervention22 mars 2011 13 avril 2008 à 21:07
C'est fait ...
Aucun changement , j'ai exactement les mêmes erreurs .
Au passage , si j'essaye d'ajouter tes commandes :
option casemap :none
option prologue:none
option epilogue:none
j'obtiens pleins d'erreurs en plus : des 'erreurs de syntaxes' et des 'spécificateur de type manquant' dans Test.asm (au cas où ca pourrait te guider...).
Jetez un coup d'oeil à mon projet de moteur 3D par lancer de rayons :
epineurien
Messages postés83Date d'inscriptionsamedi 21 mai 2005StatutMembreDernière intervention22 mars 2011 13 avril 2008 à 21:21
Oui , une seule , due à un fichier manquant semble t-il :
.\Speed32.rc(10) : fatal error RC1015: cannot open include file 'afxres.h'.
Note : pour ce qui de rajouter 'option bidule:none' , ca enlève les deux erreurs que j'avait au départ et ca les remplace par :
Test.asm(1) : error C2059: erreur de syntaxe : 'constant'
Test.asm(5) : error C2146: erreur de syntaxe : absence de ';' avant l'identificateur 'option'
Test.asm(5) : error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque : C++ ne prend pas en charge int par défaut
Test.asm(5) : error C2146: erreur de syntaxe : absence de ';' avant l'identificateur 'prologue'
Test.asm(5) : error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque : C++ ne prend pas en charge int par défaut
Test.asm(5) : error C2470: 'prologue' : similaire à une définition de fonction, mais aucune liste de paramètres ; corps apparent ignoré
Test.asm(6) : error C2061: erreur de syntaxe : identificateur 'option'
.\Demonstration.cpp(4) : error C2062: type 'int' inattendu
.\Demonstration.cpp(5) : error C2630: ';' trouvé(e) à la place d'une liste avec la virgule comme séparateur
Jetez un coup d'oeil à mon projet de moteur 3D par lancer de rayons :
epineurien
Messages postés83Date d'inscriptionsamedi 21 mai 2005StatutMembreDernière intervention22 mars 2011 13 avril 2008 à 21:39
MAJ :
J'en ai profité pour reprendre tes paramêtres pour le fichier 'Speed32.c' , vers 'Demonstration.cpp' , si je met :
Compilation sous : 'Compiler comme du code C' au lieu de 'Compiler comme du C++' ;
ca enlève l'erreur : '.\Demonstration.cpp(6) : error C3861: 'Truc' : identificateur introuvable.'
Jetez un coup d'oeil à mon projet de moteur 3D par lancer de rayons :
epineurien
Messages postés83Date d'inscriptionsamedi 21 mai 2005StatutMembreDernière intervention22 mars 2011 13 avril 2008 à 22:16
Le fichier '.rc' est bien là , mais pas 'afxres.h'.
Au passage , c'est pareil pour l'autre source :
.\TplVs08.rc(10) : fatal error RC1015: cannot open include file 'afxres.h'.
Remarque 1: toutes mes 'lignes de commandes' dans les propriétés sont différentes des tiennes.
Le problême c'est que j'arrive pas à les effacer , je ne peut que rajouter des options supplémentaires.
Remarque 2: j'ai aussi recopié les propriétés de tout le projet. Ca n'a rien changé , sauf que je peut remettre partout 'Compiler comme du C++' , c'est tant mieux parceque sans ça un 'include <windows.h>' donnait une série d'erreur de 10 mètres de long :
error C2027: utilisation du type non défini 'PreAttribute'
error C2027: utilisation du type non défini 'PostAttribute'
en boucle ...
Je sens que ça va être long... :-)
Pour tes templates , je doit utiliser lequel ? cWnd ?
epineurien
Messages postés83Date d'inscriptionsamedi 21 mai 2005StatutMembreDernière intervention22 mars 2011 15 avril 2008 à 10:26
Ok ca compile sans erreurs , mais comme j'avait pas 'winres.h' , il a fallut que je bidouille ; je l'ai remplacer par 'winresrc.h' et j'ai rajouter '#define IDC_STATIC -1'.
(Accesoirement j'ai une moyenne de 16000 pour BYTE et WORD , et 18000 pour DWORD (c'est un vieux PC au bureau )).
J'ai remplacer le contenu de tes fichiers (donc en gardant tes réglages) par les codes que j'ai posté au début :
tstspeed.asm(1) : error C2059: erreur de syntaxe : 'constant'
Cette fois c'est TON .586 qui n'est plus reconnu.
Ce qui semble vouloir dire que ca n'est pas une question de réglages .. Peut être un truc que je ne définit pas correctement dans mon code ? Pourtant même aprés relecture et comparaison avec ton .asm , je voit pas ce que j'ai put zapper d'important...
En désespoir de cause j'ai uploadé mon projet sur mon site :
http://hydrargyrum.ifrance.com/Telechargement/ProjetVSC++.rar.txt (l'extension '.txt' est à virer , c'est juste parceque mon hébergeur fait la geule au fichiers '.rar' , sans que je sache pourquoi ...).
Donc si quelqu'un a une ou deux heures à perdre pour essayer d'identifier la source du probleme ...
Jetez un coup d'oeil à mon projet de moteur 3D par lancer de rayons :
epineurien
Messages postés83Date d'inscriptionsamedi 21 mai 2005StatutMembreDernière intervention22 mars 2011 16 avril 2008 à 11:27
J'ai trouvé la source du problême !!!!!
Dans ta source tu n'as pas d'include sur 'tstSpeed.asm' , j'ai testé et c'est le '#include test.asm' qui me donnait l'erreur sur le '.x86'.
J'ai aussi comprit le coté indispensable de ton '#pragma comment(linker, "/entry:myWinMain")'.
Voilà donc le .cpp fonctionnel :
#include <windows.h>
DWORD __stdcall Truc();
#pragma comment(linker, "/entry:Main")
int Main(int argc, char* argv[])
{
Truc();
return 0;
}
Par contre juste un truc bizarre ; si je vire le "include windows.h" j'obtiens :
.\Demonstration.cpp(3) : error C2143: erreur de syntaxe : absence de '{' avant '__stdcall'
C'est quoi cette histoire ? Pourquoi y aurait il besoin d'un marqueur de corps de fonction avant de pouvoir déclarer les PROTO (enfin ... leur équivalent C++) ?
Dans tout les cas merci beaucoup pour ton aide BruNews !
Jetez un coup d'oeil à mon projet de moteur 3D par lancer de rayons :