Probleme GetModuleFileName [Résolu]

Signaler
Messages postés
198
Date d'inscription
lundi 24 avril 2006
Statut
Membre
Dernière intervention
3 avril 2008
-
Messages postés
354
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
24 mars 2011
-
Salut a vous!!

Je vous sollicite car j'ai un probleme : je dev en C sous Embedded Visual C++ (windows CE)
J'ai un exe Projet_Falcon.exe, qui s'appuie sur des données presentes dans un Projet_Falcon.ini

mon souci, c'est que je veux qu'il lise bien le ini, et ce sans donner un chemin en dur.
Donc j'ai utilisé GetModuleFileName ainsi :
    TCHAR chemin[100];
    GetModuleFileName(0,chemin,MAX_PATH);

Cela me renvoit  : \Storage Card\Projet_Falcon.exe
Le souci c'est que ensuite, je veux lire le fichier present donc à l'emplacement \Storage Card\Projet_Falcon.ini
Or, le probleme c'est qu'il n'y arrive pas, puisque les "" doivent être doublés!
Et j'en arrive a mon probleme : pour remplacer tout les "" par des "\", le compilateur me balance : error C2001: newline in constant
    (exemple : if(chemin[i]!=="")  =>error C2001: newline in constant

Si quelqu'un a une idée, ou croit que j'ecris des enormités, faites moi signe SVP, je vois pas trop là comment contourner le probleme

Merci d'avance!

24 réponses

Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Quesque c'est que ce code ?

Tu convertis en unicode, tu reconvertis en ansi tu rereconvertis etc.etc.etc.
Ensuite tu parcours pas 1, pas 2 mais bien 3 fois la chaine EN ENTIER (ou presque pour le strtok) !!!
Quelle perte de temps.

Le code que je t'ai fourni fonctionne très bien et est 100x plus rapide:

WCHAR lpPath[300], *pPath = lpPath+GetModuleFileNameW(0, lpPath, 300);

while(*--pPath != '.');

if(pPath >= lpPath) {
    *(DWORD*)++pPath = 0x006E0069;    *(DWORD*)(pPath +2) 0x00000069;
}

Et voilà. Tu ne pourras pas avoir plus rapide.

C++ (@++)<!--
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
if(pPath >= lpPath)
à quoi ça sert ??? Windows ne lance que du .EXE que je sache.

On n'adresse pas DWORD quand on ne sait pas l'alignement destination, le système rattrape l'exception dans sa config par défaut mais c'est pas une raison pour abuser vu que ça tue les perfs.
MOV 3 WORD (TCHAR) sur les places de 'EXE' et tout ira pour le mieux, eux sont assurément alignés correctement par le compilo (WCHAR lpPath[300]) .

ciao...
BruNews, MVP VC++
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
OUPS!!!!
Je dois faire trop de java. Ce genre de concept m'a complètement sortie de la tête.

Pour le

if(pPath >= lpPath), c'est inutile ici en effet. C'est simplement une habitude.

C++ (@++)<!--
Messages postés
354
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
24 mars 2011
1
Content que tu ais compris !

A+

[mailto:D@runia D@runia]