Probleme GetModuleFileName

Résolu
fredsor Messages postés 198 Date d'inscription lundi 24 avril 2006 Statut Membre Dernière intervention 3 avril 2008 - 19 oct. 2007 à 12:06
cs_darunia Messages postés 354 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 24 mars 2011 - 22 oct. 2007 à 10:25
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

SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
19 oct. 2007 à 18:23
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++ (@++)<!--
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
19 oct. 2007 à 21:42
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++
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
19 oct. 2007 à 23:38
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++ (@++)<!--
0
cs_darunia Messages postés 354 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 24 mars 2011 2
22 oct. 2007 à 10:25
Content que tu ais compris !

A+

[mailto:D@runia D@runia]
0
Rejoignez-nous