begin process at 2012 05 29 17:24:16
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

Autre

 > 

Probleme GetModuleFileName


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Probleme GetModuleFileName

vendredi 19 octobre 2007 à 12:06:10 | Probleme GetModuleFileName

fredsor

Membre Club
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!
vendredi 19 octobre 2007 à 13:00:37 | Re : Probleme GetModuleFileName

darunia

Salut,

if(chemin[i]!=="\")  est effectivement une enormité :

- l'operateur !==, c'est comment dire ... bizarre. j'aurais plus vu !=
- chemin[i] représente un char. Tu dois tester avec la valeur '\' et pas "\"

Sinon je comprends pas bien ton problème avec les \.
Dans ton cas tu as juste a faire :

strcpy(strstr(chemin, ".")  + 1, "ini)

Et le tour est joué !

D@runia
vendredi 19 octobre 2007 à 13:59:19 | Re : Probleme GetModuleFileName

SAKingdom

Membre Club
char lpPath[300], *pPath = lpPath+GetModuleFileName(0, lpPath, 300);

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

if(pPath >= lpPath) *(DWORD*)++pPath = 0x00696E69;

Et voilà. lpPath contiendra le chemin vers le ini.
   

C++ (@++)

vendredi 19 octobre 2007 à 14:03:19 | Re : Probleme GetModuleFileName

fredsor

Membre Club
Merci darunia pour la réponse

Pour le !== excuse, cest une faute de frappe pour l'exemple, evidemment que cela ne passe pas.

Sinon tester avec '\', j'avais également essayer, mais il n'aime pas mieux : if(chemin[i]=='\')             =>  error C2001: newline in constant

Enfin, ton strcpy ne fonctionne pas mieux, puisque le resultat de

strcpy(strstr(chemin, ".")  + 1, "ini)
donne "ini" tout simplement (strstr donne ce qui se trouve apres le ".".

Moi j'ai fais
char* cheminFichier = strtok(chemin,".");
cheminIni=strcat(cheminFichier,".ini");

et ca donne bien
\Storage Card\Projet_Falcon.ini, mais moi je veux \\Storage Card\\Projet_Falcon.ini !!
Car apres sinon il ne peux ouvrir le fichier à l'emplacement, si les '\' ne sont pas doublés

Si quelqu'un voit comment faire, help!


vendredi 19 octobre 2007 à 14:09:07 | Re : Probleme GetModuleFileName

fredsor

Membre Club
Oups SAKingdom j'avais pas vu ta réponse
Par contre ca compile bien, mais le programme ne bouge plus arrivé a tes instructions...

Peux tu m'expliquer en gros en quoi ca consiste, j'avoue ne pas connaitre "*--pPath", "0x00696E69"

Voila comment je l'ai utilisé

    char lpPath[300];
    char *pPath = lpPath+GetModuleFileName(0, ConvertAnsiToUnicode(lpPath), 300); =>Convert... passe de l'ascii en unicode

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

    if(pPath >= lpPath) *(DWORD*)++pPath = 0x00696E69;

    EcrireFichierBidon("pPath");  =  > pour ecrire dans un fichier genre debug
    EcrireFichierBidon(pPath);
vendredi 19 octobre 2007 à 14:11:29 | Re : Probleme GetModuleFileName

darunia

Il ne faut pas regarder ce que renvoi strcpy, mais le contenu de la variable chemin apres le strcpy !
Pour le '\' autant pour moi, il faut le doubler : '\\'

En ce qui concerne les \, il doivent etre doublés si tu le met en constante dans ton source.
Si en execution, un affichage de chemin affiche
\Storage Card\Projet_Falcon.ini alors c'est correct, je ne vois pas ou est le probleme

D@runia
vendredi 19 octobre 2007 à 14:25:02 | Re : Probleme GetModuleFileName

fredsor

Membre Club
Re Darunia,

Je n'arrive pas à declarer le '\'
J'ai essayé de passer par "define", par "const char", rien n'y fait il me mets newline in constant!!

Pour le chemin \Storage Card\Projet_Falcon.ini, je suis d'accord avec toi, il est correct, cependant par la suite dans le code je fais un
            FILE *file=_tfopen(chemin, TEXT("wt"));

et là ce chemin doit avoir les '\' doublées.
J'ai pas les yeux en face des trous ou quoi lol
Au pire aurait tu un exemple , pour définir le '\' et le remplacer par '\\' à chaque fois qu'on le rencontre dans une chaine?
Merci !
vendredi 19 octobre 2007 à 14:28:44 | Re : Probleme GetModuleFileName

darunia

Tu travailles en Ainsi ou en Unicode ?
Est ce que tu mélanges les 2 ?

D@runia
vendredi 19 octobre 2007 à 14:38:26 | Re : Probleme GetModuleFileName

darunia

Autant pour moi, j'avais pas vu que t'etais en TCHAR.
Il est impossible de remplacer '\' par '\\' car :

'\' n'existe pas, il sert pour les sequences d'echappement :

[ Lien ]

'\\' = \ en execution.

Si ton fopen foire sur chemin, c'est pour une autre raison.
[ Lien ]
D@runia
vendredi 19 octobre 2007 à 14:38:31 | Re : Probleme GetModuleFileName

SAKingdom

Membre Club
Non la tu melanges ansi et unicode.

Voici une version unicode:

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

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

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

0x00696E69 c'est la valeur hexa de "ini\0" en sens inverse (car on travail dans le stack)

C++ (@++)


1 2 3

Cette discussion est classée dans : projet, probleme, chemin, getmodulefilename, falcon


Répondre à ce message

Sujets en rapport avec ce message

Chemin d'un projet... [ par neub ] Salut tt le monde et bonnes fetes de fin d'anneeVoici ma question urgente (mon projet se termine en se moment):Je souhaite recuperer le chemin de mon probleme avec "new" [ par raptor88 ] lorsque j'utilise l'operateur new dans mon projet actuel il renvoi un pointeur "0xbaadf00d"quelqu'un sait il d'ou cela peut-il venir ca c'est le seul directX avec c++Builder [ par pro69 ] J'ai un petit probleme lorsque j'essaye de compiller des projet directX avec c++Builder. Les probleme commence deja quand je tempte d'utiliser le winm probleme avec projet MFC exe et Visual c++ 6 [ par jardel ] voilà, lorsque je cré un projet MFC exe, visual c++ 6 trouve cette erreur :Cannot open precompiled header file: 'Debug/Draw.pch': No such file or dire Probleme avec FILE [ par sidewalker ] J'ai un petit probleme... La compilation s'opère sans probleme mais lors de l'exécution ça ne s'affiche pas correctement.En fait, lorsque je tape le c wxWidgets : projet basé sur une boite de dialog ? [ par Daimadoshi ] slt tlm, voila je voudrai faire un projet basé sur une boite de dialog avec dev c++ en me servant de wxWidgets.mon probleme est le suivant j'ai fait d Compiler deux makefile [ par Marceleeuuh ] salut petite question j'ai un probleme pour le developpement de mon projet. je fais un lecteur de musique sous linux. j'ai donc un makefile à compiler probleme avec des variable membre public [ par titouf71 ] Bonjour,J'ai un gros probleme avec des variables membres public.J'ai declare une variable membre en public en CString dans ma classe CLecture.Je voudr probleme avec le type du projet ! [ par anonyme_man_in_this_world ] salut   !!j'ai fait deux application (Win32 console ) communiquant entre eux .cepandant lorsque j'ai crée un nouveau projet Win32 ,et j'ai fait copier Probleme avec Visual C++ [ par chabichabs ] J'ai un petit souci avec les ressources des boites de dialogue.Je crée un new projet et quand j'insère une ressource après les scroll bar (slider, pro


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,858 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales